问题描述
我有两个对象如下:
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-6': 4
}
解决方法
您可以对第二个对象的条目执行归约操作以求和每个键的值,使用第一个对象的副本作为初始值。
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
}
const res = Object.entries(b).reduce((acc,[k,v])=>{
acc[k] = (acc[k] || 0) + v;
return acc;
},{...a});
console.log(res);
此实用程序函数合并两个对象并对冲突的键求和,包括对 a
或 b
唯一的所有值。
const mergeWithSum = (a,b) =>
[...Object.keys(a),...Object.keys(b)].reduce((combined,key) => {
combined[key] = (a[key] ?? 0) + (b[key] ?? 0);
return combined;
},{});
const a = {
'2021-1': 10,'2020-6': 4
}
console.log(mergeWithSum(a,b));
这是另一种解决方案
function mergeObj(obja,objb) {
const merged = {...obja};
for ([key,value] of Object.entries(objb)) {
if(merged.hasOwnProperty(key)) {
merged[key] = merged[key] + value
} else {
merged[key] = value
}
}
return merged
}
它使用一个简单的 for of 循环,来自 object.entries 并且我们解构包含键和值的数组