繁体   English   中英

Javascript:如何合并两个对象并对同一个键的值求和?

[英]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#reduceObject#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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM