[英]Javascript: How to merge two objects and sum the values of the same key?
const map1 = { "a": 10, "b": 6 };
const map2 = { "a": 10, "b": 6, "c": 7, "d": 8 };
如果它们具有相同的key
,我想合并它们并对它们的values
求和:
const result = { "a": 20, "b": 12, "c": 7, "d": 8 };
在不使用任何外部库或++
的情况下如何实现这一目标? 谢谢!
使用Array#reduce
和Object#entries
:
const map1 = { "a": 10, "b": 6 }, map2 = { "a": 10, "b": 6, "c": 7, "d": 8 }; // iterate over map2 entries with acc set to map1 at start const merged = Object.entries(map2).reduce((acc, [key, value]) => // if key is already in map1, add the values, otherwise, create new pair ({...acc, [key]: (acc[key] || 0) + value }), {...map1 }); console.log(merged);
我想出了这段代码,虽然版本更长,但更具可读性和更简单 const map1 = { "a": 10, "b": 6, x: 22}; const map2 = { "a": 10, "b": 6, "c": 7, "d": 8 };
function addMerge(obj1, obj2){
let res = {}
let A = Object.keys(obj1)
let B = Object.keys(obj2)
if(A.length > B.length){
Object.keys(obj1).forEach((k, i) => {
if(obj2.hasOwnProperty(k))
res[k] = obj2[k] + obj1[k]
else
if(B[i] !== undefined){
res[k] = obj1[k]
res[B[i]] = obj2[B[i]]
}
else
res[k] = obj1[k]
});
}
else{
Object.keys(obj2).forEach((k, i) => {
if(obj1.hasOwnProperty(k))
res[k] = obj2[k] + obj1[k]
else
if(A[i] !== undefined){
res[k] = obj2[k]
res[A[i]] = obj1[A[i]]
}
else
res[k] = obj2[k]
});
}
console.log("Result", res)
}
addMerge(map1, map2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.