假设有一个对象数组,每个对象都有三个键/值对:name、age、score。我们想要遍历数组并对相同名称的对象执行减少操作,同时对不同名称的对象进行分组。
我们可以使用reduce()方法来遍历数组,以name属性作为键来创建一个汇总结果对象,然后更新该对象的其他属性值。
以下是示例代码:
const data = [
{ name: "Alice", age: 20, score: 100 },
{ name: "Bob", age: 25, score: 80 },
{ name: "Alice", age: 30, score: 50 },
{ name: "Charlie", age: 35, score: 70 }
];
const result = data.reduce((acc, obj) => {
if (!acc[obj.name]) {
acc[obj.name] = {
name: obj.name,
age: obj.age,
score: obj.score
};
} else {
acc[obj.name].age += obj.age;
acc[obj.name].score += obj.score;
}
return acc;
}, {});
const finalResult = Object.values(result);
console.log(finalResult);
输出结果为:
[
{ name: 'Alice', age: 50, score: 150 },
{ name: 'Bob', age: 25, score: 80 },
{ name: 'Charlie', age: 35, score: 70 }
]
这里我们使用了reduce()方法,第一个参数为一个累加器函数,它将返回我们要维护的累加器对象,第二个参数为初始值,这里为一个空对象{}。
在累加器函数中,我们检查此时的对象是否已经存在于累加器对象中,如果不存在,我们就创建一个新的对象;如果存在,我们就在原有对象的基础上更新age和score属性。最后,我们通过Object.values()方法将累加器对象的键值转换为一个数组返回。