javascript - 如何通过主键对数组的所有数据项进行分组并将组的所有剩余条目收集为分组值列表来重构数组的所有数据项?
问题描述
我在按键合并数组中的对象以及对数组中具有相同键的值进行分组时遇到问题。例子:
let a = [{
key: "1",
value: "a",
value2: "b"
}, {
key: "2",
value: "a",
value2: "b"
}, {
key: "1",
value: "b",
value2: "a"
}, {
key: "1",
value: "c",
value2: "d"
}]
我想要达到的结果是:
[{
key: "1",
value: ["a", "b", "c"],
value2: ["b", "a", "d"]
}, {
key: "2",
value: ["a"],
value2: ["b"]
}]
有没有人在 javascript/typescript 中有一个简单的解决方案?
我已经阅读了很多关于类似问题的主题,但没有一个与我上面提到的完全相同。
提前致谢!
解决方案
你可以这样试试。它首先将数据简化为基于键的对象,然后将其转换为您的数组。
var a = [{key:"1", value:"a",value2:"b"}, {key:"2", value:"a",value2:"b"}, {key:"1", value:"b",value2:"a"},{key:"1", value:"c",value2:"d"}]
a = a.reduce((acc, curr) => {
if (!acc[curr.key]) {
acc[curr.key] = { value: [curr.value], value2: [curr.value2] };
} else {
acc[curr.key].value.push(curr.value);
acc[curr.key].value2.push(curr.value2);
}
return acc;
}, {});
a = Object.entries(a).map(([key, value]) => ({ key, ...value }))
console.log(a);
推荐阅读
- flutter - 大卫·安纳亚(David Anaya)扑腾着无法禁用旋转轮上的可拖动手势
- certificate - x509 证书的字符编码是什么?
- sharepoint - PowerApps - 带有按钮的 ifblank 不起作用
- javascript - 如何移动代码以设置 ut DB 并从我的文件中收集并要求它?
- angular - Angular 10 - 保护单元测试
- ruby - Ruby:使用括号和字符串键访问字符串中的字符
- sql - postgresql 查询性能慢
- javascript - javascript多重计算,百分比倍数,除以
- embedded - 如何从 efm32 控制器一次发送 32 位帧
- r - R:是否有相当于将 Excel 的锁定单元格引用应用于整个字段的计算?