jQuery $ .extend - 从文字创建新对象

时间:2012-10-22 23:12:49

标签: jquery

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

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/

先谢谢,感谢任何帮助

1 个答案:

答案 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);