gpt4 book ai didi

javascript - 使用 JS map/reduce 合并对象数组而不是 forEach

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:58:33 25 4
gpt4 key购买 nike

我正在努力学习更好地使用 JS 函数,我觉得我可以使用 reduce 或 map 或两者来完成我想要的东西,但我根本找不到这种特定情况的示例:

我有一个对象数组,例如:

const data =  [
{
"member": "111111",
"offers": 0,
"categories": 0,
"total": 100,
"favorites": 0
},
{
"member": "111111",
"offers": 2,
"categories": 1,
"total": 400,
"favorites": 1
},
{
"member": "222222",
"offers": 1,
"categories": 0,
"total": 50,
"favorites": 5
}
]

目标是减少到一个数组,将每个成员的所有键值合并到一个数组中,即:

    {
"member": "111111",
"offers": 2,
"categories": 1,
"total": 500,
"favorites": 1
},
{
"member": "222222",
"offers": 1,
"categories": 0,
"total": 50,
"favorites": 5
},

因此,成员 111111 有两个条目,它们已被合并,所有其他值汇总到一个数组中。

老实说,我尝试的一切都是一团糟,所以除了使用无聊的 for 循环或在此处添加显然是垃圾的代码之外,我希望你能指出正确的方向。

最佳答案

你可以做到

const data =  [
{
"member": "111111",
"offers": 0,
"categories": 0,
"total": 100,
"favorites": 0
},
{
"member": "111111",
"offers": 2,
"categories": 1,
"total": 400,
"favorites": 1
},
{
"member": "222222",
"offers": 1,
"categories": 0,
"total": 50,
"favorites": 5
}
]


let result = data.reduce((a, b) => {
a[b.member] = a[b.member] || {member : b.member};
for(let property of Object.keys(b)){
if(property == 'member') continue;
a[b.member][property] = a[b.member][property] || 0;
a[b.member][property] += b[property];
}
return a;
}, {});

result = Object.keys(result).map(e => result[e]);

console.log(result);

关于javascript - 使用 JS map/reduce 合并对象数组而不是 forEach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47673517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com