gpt4 book ai didi

JavaScript:将具有相似属性的对象分组

转载 作者:行者123 更新时间:2023-11-29 17:56:11 26 4
gpt4 key购买 nike

我有一个 JavaScript 对象数组,看起来像这样。

[ { name: "A", value: 50 },
{ name: "B", value: 20 },
{ name: "C", value: 30 },
{ name: "A", value: 40 },
{ name: "A", value: 50 },
{ name: "B", value: 70 },
{ name: "A", value: 10 },
{ name: "C", value: 50 } ]

我想遍历这个数组并删除任何同名的重复对象,同时将它们的值加在一起。基本而言:

[ { name: "A", value: 200 },
{ name: "B", value: 90 },
{ name: "C", value: 80 } ]

我知道如何去做,伪代码:

for each object Obj in array A
current = Obj
for(i = (Obj's index + 1); i < A.length; i++)
if(A[i].name = Obj.name)
Obj.value += A[i].value
delete A[i]
endif
endfor
endfor

我觉得这样效率很低。有没有更好的方法来解决这个问题?

最佳答案

我会使用一个临时对象作为中间状态,然后基于该对象创建一个新数组:

var arr = [ { name: "A", value: 50 },
{ name: "B", value: 20 },
{ name: "C", value: 30 },
{ name: "A", value: 40 },
{ name: "A", value: 50 },
{ name: "B", value: 70 },
{ name: "A", value: 10 },
{ name: "C", value: 50 } ];

var tempObj = arr.reduce(function (newObj, obj) {
if (newObj[obj.name]) {
newObj[obj.name] += obj.value;
} else {
newObj[obj.name] = obj.value;
}
return newObj;
}, {});

console.log(tempObj);

var result = [];

for (var i in tempObj) {
result.push({
name: i,
value: tempObj[i]
});
}

console.log(result);

关于JavaScript:将具有相似属性的对象分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38873636/

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