Javascript数组传递的值不起作用

时间:2014-06-24 18:08:53

标签: javascript arrays

我有一个对象数组

var obj = {'name': 'John'};
var obj2 = {'name': 'Sam'};
var arr = [];
arr.push(obj);
arr.push(obj2);

现在我创建一个新的数组arr2作为

arr2 = arr.slice();

现在,如果我更改arr2[0]['name'] = 'David';

然后arr1[0]['name']也变为'David';

如果arr对象值发生更改,我们如何防止arr2的任何对象值发生变化。

2 个答案:

答案 0 :(得分:1)

你必须克隆每个对象,而不仅仅是数组:

function cloneObject(obj) {
    var result = {};

    for (var k in obj) {
        if (Object.prototype.hasOwnProperty.call(obj, k)) {
            result[k] = obj[k];
        }
    }

    return result;
}

var arr2 = arr.map(cloneObject);

  

我们有办法阻止对象改变吗?

是的,有Object.freeze

arr.forEach(Object.freeze);

答案 1 :(得分:0)

复制数组时,只复制数组中的值,但值是对象的引用。最终得到两个独立的数组,但引用了相同的对象。

您需要制作一份深层副本,即复制每个级别的所有内容:

var arr2 = JSON.parse(JSON.stringify(arr));

现在你有一个完全独立的数组副本及其中的所有内容。