1

所以目前我这里有一个数组,我想对最后一项进行一些修改并将其推回。这里我有这个代码:(示例被简化)

var array = [
                 [ [0,1,2], [3,4,5] ]
            ];

//other stuff...

var add = array[0].slice(); //to clone the array (but not working as expected)
add[0][0] = 10;
array.push(add);

console.log(array);

这是结果

       在此处输入图像描述

如您所见,第 1 项和第 2 项都将其第一项更改为10。我怎么解决这个问题?我已经克隆了数组。

4

2 回答 2

5

Array.prototype.slice()做浅拷贝,所以嵌套数组不会被拷贝。你应该像这样使用深度克隆方法。

于 2013-07-19T03:55:56.150 回答
1

Array.prototype.slice() 不会克隆嵌套数组。您可以针对您的问题做类似的事情

var array = [
                 [ [0,1,2], [3,4,5] ]
            ];

//other stuff...

var add = array[0].slice(); //to clone the array (but not working as expected)
add[0] = array[0][0].slice();
add[0][0] = 10;
array.push(add);

console.log(array);
于 2013-07-19T03:58:43.490 回答