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我很抱歉。我不知道代码审查链接。有什么方法可以让我自动转到代码审阅,或者我必须复制粘贴?除了复制/粘贴,我不知道有什么方法。