首页 > 解决方案 > Javascript:合并对象数组,对具有相同键的值求和

问题描述

我已经搜索了我的问题,但是,我没有找到符合我需求的东西。我想将多个系列数据合并(总和)到一个数组中。任何与键匹配的数据集都应在结果数组中求和。

请参阅示例数据和预期结果:

var power1 = [
  {
    "time": 10,
    "power": 100
  },
  {
    "time": 20,
    "type": 200
  },
  {
    "time": 30,
    "type": 300
  }
]
var power2 = [
  {
    "time": 20,
    "type": 200
  },
  {
    "time": 30,
    "type": 300
  },
  {
    "time": 40,
    "type": 400
  }
]    
var result = [
  {
    "time": 10,
    "type": 100
  },
  {
    "time": 20,
    "type": 400
  },
  {
    "time": 30,
    "type": 600
  },
  {
    "time": 40,
    "type": 400
  }
]

由于这应该发生在数千个项目上,所以它应该是合理的快速。地图可以作为中间帮助吗?

提前致谢

标签: javascriptdictionaryjoinmerge

解决方案


您可以concat使用这两个数组,然后reduce使用对象对其执行操作以存储每个键的值。

var power1=[{time:10,type:100},{time:20,type:200},{time:30,type:300}],power2=[{time:20,type:200},{time:30,type:300},{time:40,type:400}];
const res = Object.values(
  power1.concat(power2).reduce((acc, {type, time})=>{
    (acc[time] ??= {time, type: 0}).type += type;
    return acc;
  }, {})
);
console.log(res);


推荐阅读