根据包含数组项的对象属性映射的数组

时间:2020-10-13 14:30:46

标签: javascript node.js

如果我有如下对象

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是否可以执行上述功能?

2 个答案:

答案 0 :(得分:0)

使用Array.prototype.reduce,您可以执行此操作。

(string)

答案 1 :(得分:0)

我不知道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());

但是代码大致相同,性能可能相差不远,可读性在读者眼中。

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