javascript - 在Javascript中计算对象数组的多个总和
问题描述
我正在尝试从对象数组中计算多个总和:
[{value1: 3, value2:6}, {value1: 2, value2: 4},...]
. 潜在地,对象可以包含未指定数量的键(即 value1:、value2:、value3:...、value n)。根据此示例,所有 value1 键的总和应返回 5,而所有 value2 键的总和应返回 10。
到目前为止我所做的如下:
let sum = 0;
const myArrayObject = [{value1: 3, value2:6}, {value1: 2, value2: 4}];
const objectKeys = Object.keys(myArrayObject[0]); //Gives me the keys of the object
objectKeys.forEach(key => {
myArrayObject.map((entry) => {
sum += entry[key];
});
});
return sum;
然而,这给了我总共 15 个。有没有办法分别计算所有 value1 键和 value2 键的总和?
解决方案
这是一个简单的基于reduce的解决方案:
const values = [
{ value1: 3, value2: 6 },
{ value1: 2, value2: 4 },
];
const basket = values.reduce((basket, value) => {
for (const [key, count] of Object.entries(value)) {
if (!basket[key]) {
basket[key] = 0;
}
basket[key] += count;
}
return basket;
}, {});
console.log(basket); // { value1: 5, value2: 10 }