将对象数组按属性对象减少为总计

use*_*868 6 javascript ecmascript-6

我正在寻找一种智能的ES6方法,以将对象数组减少为按属性对象总计。

对于样本数据:

const src = [{mon:1,tue:0,wed:3,thu:5,fri:7,sat:0,sun:4}, {mon:5,tue:3,wed:2,thu:0,fri:1,sat:0,sun:6}];
Run Code Online (Sandbox Code Playgroud)

以下代码:

const res = src.reduce((totals,item) => Object.keys(item).forEach(weekday => totals[weekday] += item[weekday]),{})
Run Code Online (Sandbox Code Playgroud)

引发错误:

未捕获的TypeError:无法读取未定义的属性“ mon”

即使reduce使用{mon:0, tue:0 ...}代替进行了初始化{}

是否有非循环解决方案?

ps预期输出是一个对象,其中每个属性都是该属性所组成的数组对象的总和,例如,{mon:6, tue:3, wed:5, thu:5, fri:8, sat:0, sun:10}在我的情况下

Ori*_*ori 5

totals修改后需要返回:

const src = [{mon:1,tue:0,wed:3,thu:5,fri:7,sat:0,sun:4}, {mon:5,tue:3,wed:2,thu:0,fri:1,sat:0,sun:6}];

const res = src.reduce((totals, item) => {
  Object.keys(item).forEach(weekday => totals[weekday] = (totals[weekday] || 0) + item[weekday]);
  
  return totals;
}, {});

console.log(res);
Run Code Online (Sandbox Code Playgroud)

  • 我简直不敢这么近。非常感谢。 (3认同)