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呼び出されるたびに拡張します。

ターゲットオブジェクト(最初の引数)[またはdeepparamが使用されている場合は2番目の引数]が変更され、$。extend()からも返されることに注意してください。ただし、元のオブジェクトの両方を保持したい場合は、空のオブジェクトをターゲットとして渡すことでそれを行うことができます。

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