数据争用:对javascript中两个不同数组的值求和并推送一个新对象

数据争用:对javascript中两个不同数组的值求和并推送一个新对象,javascript,arrays,data-wrangling,Javascript,Arrays,Data Wrangling,我有两个数组/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: &

我有两个数组/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})   
  }
let result=[];
对于(变量i=1;i
问题是我需要确保
data2
data3
数组都按
date
排序。有没有更好的方法来解释for循环中的
日期
?与for循环不同的任何其他结构都可以。我想知道通过
日期
获取
结果
数组检查的最佳方法是什么

const result = data2.map(item => {
    const fItem = data3.find(e=>e.date === item.date)
    if(fItem){
        return {date: item.date, sum: item.a + fItem.a}
    }
    return {date: item.date, sum: item.a}
})
我希望这段代码对你有用

另一个解决方案是将data3转换为一个对象,键是date,值是属性。例如:

const object = data3.reduce((init, item)=> ({...init, [item.date]: item.a}), {})
之后的使用方法同上

    const fItem = data3.find(e=>e.date === item.date)
改为

    const fItem = obj[item.date]
我希望这段代码对你有用

另一个解决方案是将data3转换为一个对象,键是date,值是属性。例如:

const object = data3.reduce((init, item)=> ({...init, [item.date]: item.a}), {})
之后的使用方法同上

    const fItem = data3.find(e=>e.date === item.date)
改为

    const fItem = obj[item.date]

您可以创建映射,然后对值求和

const数据2=[{
日期:“2018-04-23”,
答:2,,
b:2
},
{
日期:“2020-04-24”,
答:1,,
b:2
},
{
日期:“2020-04-25”,
答:1,,
b:2
}
]
常数数据3=[{
日期:“2018-04-23”,
a:5,
b:2
},
{
日期:“2020-04-24”,
a:4,
b:2
},
{
日期:“2020-04-25”,
答:1,,
b:2
}
]
常量映射2=data2.reduce((acc,cur)=>{
acc[当前日期]=当前日期;
返回acc;
}, {});
常量映射3=数据3.reduce((acc,cur)=>{
会计科目[当前日期]=(会计科目[当前日期]| | 0)+当前日期;
返回acc;
},map2);
const result=Object.keys(map3.map)(k=>{
返回{
日期:k,
总和:map3[k]
};
});

控制台日志(结果)您可以创建映射,然后对值求和

const数据2=[{
日期:“2018-04-23”,
答:2,,
b:2
},
{
日期:“2020-04-24”,
答:1,,
b:2
},
{
日期:“2020-04-25”,
答:1,,
b:2
}
]
常数数据3=[{
日期:“2018-04-23”,
a:5,
b:2
},
{
日期:“2020-04-24”,
a:4,
b:2
},
{
日期:“2020-04-25”,
答:1,,
b:2
}
]
常量映射2=data2.reduce((acc,cur)=>{
acc[当前日期]=当前日期;
返回acc;
}, {});
常量映射3=数据3.reduce((acc,cur)=>{
会计科目[当前日期]=(会计科目[当前日期]| | 0)+当前日期;
返回acc;
},map2);
const result=Object.keys(map3.map)(k=>{
返回{
日期:k,
总和:map3[k]
};
});

控制台日志(结果)值<代码>和<代码>数据2<代码>中的<代码>a<代码>和<代码>数据3<代码>中的<代码>a<代码>的和与预期输出不匹配。那么值<代码>和<代码>数据2<代码>中的<代码>a<代码>和<代码>数据3<代码>中的<代码>a<代码>的和与预期输出不匹配。