javascript – 如何通过从具有相同名称的键一起添加数值来$.extend 2个对象?

前端之家收集整理的这篇文章主要介绍了javascript – 如何通过从具有相同名称的键一起添加数值来$.extend 2个对象?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前有2个obj并使用 jquery扩展函数,但是它会覆盖具有相同名称的键的值.如何将值一起添加
var obj1 = {
  "orange": 2,"apple": 1,"grape": 1
};

var obj2 = {
  "orange": 5,"banana": 1
};

mergedObj = $.extend({},obj1,obj2);

var printObj = typeof JSON != "undefined" ? JSON.stringify : function (obj) {
  var arr = [];

  $.each(obj,function (key,val) {
    var next = key + ": ";
    next += $.isPlainObject(val) ? printObj(val) : val;
    arr.push(next);
  });

  return "{ " + arr.join(",") + " }";
};

console.log('all together: ' + printObj(mergedObj));

我得到obj1 = {“orange”:5,“apple”:1,“grape”:1,“banana”:1}

我需要的是obj1 = {“orange”:7,“apple”:2,“banana”:1}

解决方法

所有$.extend都会加入这两个对象但它不会添加值,它会覆盖它们.
您将不得不手动执行此操作. $.extend对于添加修改对象的水果很有用,但如果你需要总和,你将需要循环:
var obj1 = { orange: 2,apple: 1,grape: 1 };
var obj2 = { orange: 5,banana: 1 };
var result = $.extend({},obj2);
for (var o in result) {
  result[o] = (obj1[o] || 0) + (obj2[o] || 0);
}
console.log(result); //=> { orange: 7,apple: 2,grape: 1,banana: 1 }

演示:http://jsfiddle.net/elclanrs/emGyb/

猜你在找的JavaScript相关文章