将多级对象文字推送到数组时,值会搞乱

时间:2014-07-29 21:54:59

标签: javascript jquery object multidimensional-array literals

我有一个多层次的json对象,我们称它为ZOO。

var ZOO = {
            info: {
                cages: {
                    amount: 5,
                    size: { x: 1, y: 0.2 },
                    additionals: 'a broken bucket',
                },
            },
        }, myZoos = [];

现在我想克隆&更改此对象,然后将其添加到名为myZoos的数组中。

window.JSON.clone = function (json) {
    return $.extend({}, json);
};
for (var a = 1; a <= 3; a++) {
            var newZoo = JSON.clone(ZOO);
            newZoo.info.cages.size = { x: (a * 5), y: (a * 2) };
            myZoos.push(newZoo);
        }

让我们阅读填充数组并检查随机大小值!

for (var b = 0; b < myZoos.length; b++) {
            var myZoo = myZoos[b];
            console.log(myZoo.info.cages.size);
        }

结果:

Object { x: 15, y: 6 }
Object { x: 15, y: 6 }
Object { x: 15, y: 6 }

看起来我只得到推送到阵列的最后一个值! 为什么只返回数组中的最后一项?

1 个答案:

答案 0 :(得分:1)

您需要使用.extend() method

的深拷贝参数
window.JSON.clone = function (json) {
    return $.extend(true, {}, json);
};