我有两个目标如下:
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
}发布于 2021-01-14 15:18:46
您可以对第二个对象的条目执行约简操作,使用第一个对象的副本作为初始值,对每个键的值进行求和。
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);
发布于 2021-01-14 15:22:23
此实用程序函数合并两个对象并对冲突的键进行求和,包括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,
'2021-2': 8
}
const b = {
'2021-1': 10,
'2020-3': 10,
'2020-4': 15,
'2020-5': 12,
'2020-6': 4
}
console.log(mergeWithSum(a, b));
发布于 2021-01-14 15:29:30
这是另一个解决方案
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,我们构造了包含键和值的数组。
https://stackoverflow.com/questions/65721625
复制相似问题