javascript - 基于包含数组项的对象属性映射的数组
问题描述
如果我有如下对象
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 方式来执行上述功能?
解决方案
我不知道它是否足够 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());
但代码或多或少是一样的,性能可能相差不远,可读性在读者眼中。
简而言之,您的里程可能会有所不同。
推荐阅读
- python - Python:你能用存储在变量中的值命名一个对象吗?
- java - Spring Boot 2.5.0 生成 plain.jar 文件。我可以删除它吗?
- python - Pandas - 绘制 P1D 时间间隔
- c# - 带有 Uno 平台应用程序的 Socket Err 10013
- python - 球碰撞代码不起作用,球粘在一起
- gcc - 为什么在尝试配置 make 时出现此错误?
- sql-server - SQL有两列不同的计数
- c# - 用于在数据网格中绑定的多种属性类型
- flutter - 如何在 Flutter 中检查 DateTime 初始化变量中的可为空值
- swift - 为什么 Data(bytes:count:) 需要一个可变变量作为其指针的源?