修改克隆数组的值时如何保留嵌套数组值?

时间:2015-10-16 17:54:54

标签: javascript arrays

我有一个名为default_array的默认嵌套数组,非常简单:

default_array = [
        ["a", "b", "c"] 
];

我创建了一个名为obj的obj,其array属性的值是default_array的副本:

obj = {

    "array" : default_array.slice(0)
};

但是当我像这样修改obj.array的元素时:

obj.array[0][0] = "z";

这也修改了default_array。我希望此修改不会影响default_array。我想保留default_array

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

function copy(array) {
    var result = [];
    for (var i = 0, len = array.length; i < len; i++) {
        result.push(array[i].slice());
    }
    return result;
}

var default_array = [
    ["a", "b", "c"]
];
var obj = {
    "array": copy(default_array)
};

obj.array[0][0] = 'z';
console.log(obj.array);
console.log(default_array);

答案 1 :(得分:0)

尝试使用map或或者您可以使用JSON.parse&amp;组合JSON.stringify,因为你有一个嵌套/多维数组:

default_array = [
    ["a", "b", "c"]
];
var newArray = default_array.map(function(arr) {
    return arr.slice();
});
//Or you can use combination of JSON.parse & Stringify
var newArray = JSON.parse(JSON.stringify(default_array));
obj = {
    "array": newArray.slice(0)
};

答案 2 :(得分:0)

这对您的问题可能有点过分,但如果您越来越多地遇到它,请考虑使用Immutable.js

它提供了高效的不可变数据类型....只需查看https://facebook.github.io/immutable-js/以获取使用ibrary的示例代码。

答案 3 :(得分:0)

你可以试试这个:

obj = {
    "array" : JSON.parse(JSON.stringify(default_array))
};