首页 > 解决方案 > 在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 键的总和?

标签: javascript

解决方案


这是一个简单的基于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 }

推荐阅读