javascript - 数据争吵:在javascript中对两个不同数组的值求和并推送一个新对象
问题描述
我有以下格式的两个数组/json文件:
const data2 = [{date: "2018-04-23", a: 2, b: 2},
{date: "2020-04-24", a: 1, b: 2},
{date: "2020-04-25", a: 1, b: 2}]
const data3 = [{date: "2018-04-23", a: 5, b: 2},
{date: "2020-04-24", a: 4, b: 2},
{date: "2020-04-25", a: 1, b: 2}]
我想得到以下结果:
const result = [{date: "2018-04-23", sum: 7},
{date: "2020-04-24", sum: 5},
{date: "2020-04-25", sum: 2}]
计算/创建这个新数组的最佳方法是什么?
我试过这个:
let result = [];
for( var i=1; i < data3.length; i++) {
result.push({ date: data3[i].date,
sum: data2[i].a + data3[i].a})
}
问题是我需要确保data2
和data3
数组都按date
. 有没有更好的方法来date
解决 for 循环中的问题?与 for 循环不同的任何其他结构都可以。我想知道获取result
数组检查的最佳方法是什么date
。
解决方案
您可以创建地图,然后对值求和
const data2 = [{
date: "2018-04-23",
a: 2,
b: 2
},
{
date: "2020-04-24",
a: 1,
b: 2
},
{
date: "2020-04-25",
a: 1,
b: 2
}
]
const data3 = [{
date: "2018-04-23",
a: 5,
b: 2
},
{
date: "2020-04-24",
a: 4,
b: 2
},
{
date: "2020-04-25",
a: 1,
b: 2
}
]
const map2 = data2.reduce((acc, cur) => {
acc[cur.date] = cur.a;
return acc;
}, {});
const map3 = data3.reduce((acc, cur) => {
acc[cur.date] = (acc[cur.date] || 0) + cur.a;
return acc;
}, map2);
const result = Object.keys(map3).map(k => {
return {
date: k,
sum: map3[k]
};
});
console.log(result);
推荐阅读
- log4net - Log4net:按 GlobalContext 中的特定属性过滤似乎不起作用。如何正确设置它并在 PropertyFilter 中使用?
- c - 如何在打印语句中间获取用户输入
- python - 从列表创建列表
- excel - 字符串变量返回空,尽管被赋值
- c - 如何检查是否定义了宏等函数中的参数
- python - 如何将附件从 Outlook 拖放到 WxPython 应用程序
- antlr - Antlr4 语法内存不足 - 怎么办?
- python - 如果从字符串中选择某个单词,如何仅使一段代码工作
- php - Codeigniter "Unable to find validation rules" when using $this->form_validation->set_rules
- java - 从对象属性中的 ArrayList 获取元素?