javascript - 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
}
]
由于这应该发生在数千个项目上,所以它应该是合理的快速。地图可以作为中间帮助吗?
提前致谢
解决方案
您可以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);
推荐阅读
- python - 如何将变量从 PyQt5 UI 返回到 Main 函数 - Python
- c# - 为什么我网站上的重定向会将我带到 azure.websites.net 而不是我的域?
- android - 使用 API 时出错:java.lang.NoSuchFieldError: No field networkTimeMs of type J in class Lcom/android/volley/NetworkResponse
- java - 从下拉自动完成中选择值
- php - 如何允许在laravel的文本字段中输入特殊字符
- javascript - How to loop through nested objects in reactjs?
- python-3.x - python中的段/分析
- javascript - 添加到数组时检查对象属性 - ES6
- r - R中的列操作-存储为列名的数据
- excel - StringBuilder 追加替换数据问题