我有一个名为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
。
有什么想法吗?
答案 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))
};