我目前有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对于添加或修改对象的水果很有用,但如果你需要总和,你将需要循环:
您将不得不手动执行此操作. $.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/