Javascript 修改克隆数组的值时如何保留嵌套数组值?
我有一个名为Javascript 修改克隆数组的值时如何保留嵌套数组值?,javascript,arrays,Javascript,Arrays,我有一个名为default\u array的默认嵌套数组,非常简单: default_array = [ ["a", "b", "c"] ]; 我创建了一个名为obj的obj,其中他的array属性的值是default\u array的副本: obj = { "array" : default_array.slice(0) }; 但当我修改obj.array的元素时,如下所示: obj.array[0][0] = "z"; 这也会修改默认的\u数组。我希望此修改
default\u array
的默认嵌套数组,非常简单:
default_array = [
["a", "b", "c"]
];
我创建了一个名为obj
的obj,其中他的array
属性的值是default\u array
的副本:
obj = {
"array" : default_array.slice(0)
};
但当我修改obj.array
的元素时,如下所示:
obj.array[0][0] = "z";
这也会修改默认的\u数组
。我希望此修改不会影响默认数组
。我想保留默认数组
有什么想法吗?尝试使用
map
或者您可以使用JSON.parse
&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)
};
函数副本(数组){
var结果=[];
对于(变量i=0,len=array.length;i log(默认的_数组)代码> 对于您的问题,这可能是多余的,但是如果您越来越多地使用它,请考虑使用不可变的.js
它提供高效的不可变数据类型。。。。只需查看使用库的示例代码。您可以尝试以下方法:
obj = {
"array" : JSON.parse(JSON.stringify(default_array))
};
Tryvar copy=default_array.map(函数(e){returne;})编码>然后使用复制
。IE8不支持映射。使用。这一点值得商榷,IE8不支持IE8map。不带.map()和不带jquery是可能的?您可以结合使用JSON.parse
和JSON.stringify
请参阅editNit:如果default\u数组的所有元素都不是数组,这将不起作用。扩展版本适用于父数组中的情况,而不仅仅是数组