Javascript 基于包含数组项的对象属性映射的数组

Javascript 基于包含数组项的对象属性映射的数组,javascript,node.js,Javascript,Node.js,如果我有一个像下面这样的对象 result = [ { phones : ["ABC", "DEF"], name: "Simon" }, { phones : ["ABC", "XZY"], name: "John" } ] 预期产量 关键、价值的地图 {ABC, ["Simon", "John&quo

如果我有一个像下面这样的对象

result  = [
 {
   phones : ["ABC", "DEF"],
   name: "Simon"
 },
 {
   phones : ["ABC", "XZY"],
   name: "John"
 }
]
预期产量

关键、价值的地图

{ABC,     ["Simon", "John"]}
{DEF,     ["Simon"]}
{XYZ,     ["John"]}
我的尝试

map: Map = new Map();   
for ( r of result ) {
   for( phone of r.phones) {
      if(map.get(phone)){
        map.put(phone, map.get(phone).concat(r.name))
      } else {
        map.put(phone, r.name);
      }
   }
}
是否有ES6方法来执行上述功能?

使用,您可以执行此操作

const输入=[{
电话:[“ABC”,“DEF”],
姓名:“西蒙”
},
{
电话:[“ABC”,“XZY”],
姓名:“约翰”
}];
常量结果=输入。减少((acc,cur)=>{
当前电话费((项目)=>{
附件[项目]?附件[项目]。推送(当前名称):附件[项目]=[当前名称];
});
返回acc;
}, {});
控制台日志(结果)使用,您可以执行此操作

const输入=[{
电话:[“ABC”,“DEF”],
姓名:“西蒙”
},
{
电话:[“ABC”,“XZY”],
姓名:“约翰”
}];
常量结果=输入。减少((acc,cur)=>{
当前电话费((项目)=>{
附件[项目]?附件[项目]。推送(当前名称):附件[项目]=[当前名称];
});
返回acc;
}, {});

控制台日志(结果)我不知道ES6是否足够,但使用map reduce会给出如下结果:

result.reduce((map, person) => {
  person.phones.forEach(phone => 
    map.has(phone)
      ? map.get(phone).push(person.name)
      : map.set(phone, [person.name])
  );
  return map;
}, new Map());
但是代码或多或少都是一样的,性能可能并不遥远,可读性在读者的眼中


简而言之,您的里程数可能会有所不同。

我不知道ES6是否足够,但使用map reduce会给出如下结果:

result.reduce((map, person) => {
  person.phones.forEach(phone => 
    map.has(phone)
      ? map.get(phone).push(person.name)
      : map.set(phone, [person.name])
  );
  return map;
}, new Map());
但是代码或多或少都是一样的,性能可能并不遥远,可读性在读者的眼中


简而言之,您的里程数可能会有所不同。

这就是ECMAScript 2015(ES6)。你期待什么?@evolutionxbox谢谢你的评论。我想知道是否有某种最小化的方法来进行双重迭代。:)最好不要在这里问这个问题。(当然,除非代码不符合您的要求)@evolutionxbox我很抱歉。我不知道代码审查链接。有什么方法可以让我自动转到代码审阅或复制粘贴?除了复制/粘贴之外,我不知道还有什么方法。那就是ECMAScript 2015(ES6)。你期待什么?@evolutionxbox谢谢你的评论。我想知道是否有某种最小化的方法来进行双重迭代。:)最好不要在这里问这个问题。(当然,除非代码不符合您的要求)@evolutionxbox我很抱歉。我不知道代码审查链接。有什么方法可以让我自动转到代码审阅,或者我必须复制粘贴?除了复制/粘贴,我不知道有什么方法。