我试图将一个对象数组中的每个对象(都是对象文字)与一个也是对象文字的“原型”合并:
var objArray = [{
first: 123,
second: "asd",
third: function () {
alert("hello");
},
items: {
color: "brown",
number: 10
}
}, {
first: 765,
second: "lkj",
third: function () {
alert("goodbye");
},
items: {
color: "yellow",
number: 999
}
}];
var obj2 = {
first: 143,
items: {
color: "blue",
number: false
}
};
var combinedObjArray = [];
var i;
for (i = 0; i < objArray.length; i += 1) {
var newObj = $.extend(true, obj2, objArray[i]);
combinedObjArray.push(newObj);
}
alert(JSON.stringify(combinedObjArray));
我的问题是“newObj”只是创建一个指针,而不是创建唯一的对象(我认为):
先谢谢,感谢任何帮助
答案 0 :(得分:3)
这一行...
var newObj = $.extend(true, obj2, objArray[i]);
......实际上应该写成......
var newObj = $.extend(true, {}, obj2, objArray[i]);
...否则每次调用时都会增加obj2
:
请记住,目标对象(第一个参数)[或第二个参数,使用
deep
param时]将被修改, 并且还将从$ .extend()返回。但是,如果我们想要 保留两个原始对象,我们可以通过传递一个 空对象作为目标:
var object = $.extend(true, {}, object1, object2);