循环多个数组并对相同键的值求和

IT技术 javascript reactjs
2021-05-02 08:43:46

我有不同长度的多个数组,每个数组都有键值对的对象。

[{date: "2018-11-26", totalHours: 2},{date: "2018-11-27", totalHours: 2}]
[{date: "2018-11-26", totalHours: 4},{date: "2018-11-27", totalHours: 2},{date: "2018-11-28", totalHours: 8}]
[{date: "2018-11-26", totalHours: 4},{date: "2018-11-27", totalHours: 2},{date: "2018-11-28", totalHours: 6},{date: "2018-11-30", totalHours: 9}]

考虑到所有数组,如何对相同日期的 totalHours 求和?

3个回答

您可以先使用扩展语法创建一个数组,然后使用reduce方法来计算总和。

let a = [{date: "2018-11-26", totalHours: 2},{date: "2018-11-27", totalHours: 2}]
let b = [{date: "2018-11-26", totalHours: 4},{date: "2018-11-27", totalHours: 2},{date: "2018-11-28", totalHours: 8}]
let c = [{date: "2018-11-26", totalHours: 4},{date: "2018-11-27", totalHours: 2},{date: "2018-11-28", totalHours: 6},{date: "2018-11-30", totalHours: 9}]

let sum = [...a, ...b, ...c].reduce((r, {date, totalHours}) => {
  if(!r[date]) r[date] = totalHours;
  else r[date] += totalHours;
  return r;
}, {})

console.log(sum)

您可以按如下方式使用reduce函数:

const x = [{ date: '2018-11-26', totalHours: 2 }, { date: '2018-11-27', totalHours: 2 }]

const sum = x.reduce((a, c) => a + c.totalHours, 0)
console.log(sum) // 4

let a = [
    ...[{date: "2018-11-26", totalHours: 2},{date: "2018-11-27", totalHours: 2}],
    ...[{date: "2018-11-26", totalHours: 4},{date: "2018-11-27", totalHours: 2},{date: "2018-11-28", totalHours: 8}],
    ...[{date: "2018-11-26", totalHours: 4},{date: "2018-11-27", totalHours: 2},{date: "2018-11-28", totalHours: 6},{date: "2018-11-30", totalHours: 9}]
];

let result = {};

a.forEach((i) => {
  result[i.date] = result[i.date] || { date: i.date, totalHours: 0 };
  result[i.date].totalHours += i.totalHours;
});

result = Object.values(result)
console.log(result);