Javascript 如何合并两个具有重复键汇总值的对象

Javascript 如何合并两个具有重复键汇总值的对象,javascript,javascript-objects,Javascript,Javascript Objects,我有两个目标如下: const a = { '2021-1': 10, '2021-2': 8 } const b = { '2021-1': 10, '2020-3': 10, '2020-4': 15, '2020-5': 12, '2020-6': 4 } 我想合并两个对象,并对重复键的值求和 预期结果是: { '2021-1': 20, '2021-2': 8, '2020-3': 10, '2020-4': 15, '2020-5':

我有两个目标如下:

const a = {
  '2021-1': 10,
  '2021-2': 8
}
const b = {
  '2021-1': 10,
  '2020-3': 10,
  '2020-4': 15,
  '2020-5': 12,
  '2020-6': 4
}
我想合并两个对象,并对重复键的值求和

预期结果是:

{
  '2021-1': 20,
  '2021-2': 8,
  '2020-3': 10,
  '2020-4': 15,
  '2020-5': 12,
  '2020-6': 4
}

您可以使用第一个对象的副本作为初始值,对第二个对象的条目执行reduce操作,以对每个键的值求和

常数a={ '2021-1': 10, '2021-2': 8 } 常数b={ '2021-1': 10, '2020-3': 10, '2020-4': 15, '2020-5': 12, '2020-6': 4 } const res=Object.entrieb.reduceac[k,v]=>{ acc[k]=acc[k]| | 0+v; 返回acc; },{…a};
console.logres 此实用程序函数合并两个对象并求和冲突的键,包括a或b唯一的所有值

常数mergeWithSum=a,b=> […Object.keysa,…Object.keysb].还原组合,键=>{ 组合[键]=a[键]?0+b[键]?0; 综合收益; }, {}; 常数a={ '2021-1': 10, '2021-2': 8 } 常数b={ '2021-1': 10, '2020-3': 10, '2020-4': 15, '2020-5': 12, '2020-6': 4 }
console.logmergeWithSuma,b 这是另一个解决方案

函数mergeObjobja,objb{ const merged={…obja}; 对于Object.entriesobjb的[key,value]{ ifmerged.hasOwnPropertykey{ 合并的[键]=合并的[键]+值 }否则{ 合并[键]=值 } } 返回合并 }
它使用了一个简单的for of循环,来自object.entries,我们对包含键和值的数组进行了解构

什么不起作用?能否附上解决方案?我如何使用纯javascript或lodash获得结果?感谢您的回答@iota@WilliamWang没问题。谢谢你的回答,@soimon但这不正常。2021-1年应该是20@WilliamWang你说得对,我忘记带括号了。我已经纠正了它,但由于iota接受的答案在功能上是相同的,所以您采用哪种方法是无关紧要的。