0

我正在尝试将对象数组(都是对象文字)中的每个对象与一个“原型”合并,该“原型”也是一个对象文字:

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”只是创建一个指针,而不是创建唯一的对象(我认为):

http://jsfiddle.net/RbabL/

提前致谢,任何帮助表示赞赏

4

1 回答 1

3

这条线...

var newObj = $.extend(true, obj2, objArray[i]);

...实际上应该写成...

var newObj = $.extend(true, {}, obj2, objArray[i]);

obj2...否则你会在每次调用它时增加:

请记住,目标对象(第一个参数)[或第二个参数,当deep使用参数时]将被修改,并且也将从 $.extend() 返回。但是,如果我们想保留两个原始对象,我们可以通过传递一个空对象作为目标来实现:

var object = $.extend(true, {}, object1, object2);
于 2012-10-22T23:19:56.140 回答