在尝试将数组复制到另一个数组的过程中,我遇到了spread operator的文档,其中提到了:
深度复制数组
var arr = [1,2,3];
var arr2 = [...arr];
arr2.push(4); // 'arr2' becomes [1,2,3,4]; 'arr' stays unaffected
在我的experiments中,我使用了这种方法,并尝试将array1复制到array2中。但是,当我更改array1时,array2也被更改了。如果深度拷贝意味着新阵列被分配了新的内存,这怎么可能?
答案 0 :(得分:0)
:
array1 = [[1,2], [4]];
array2 = [...array1];
array3 = array1.slice();
array4 = JSON.parse(JSON.stringify(array1));
array1[0][1] = 3;
console.log(array1);
console.log(array2); // changed array1, changes reflected in array2 deep copy where art' though?
显然,当您执行array1[0][1] = 3;
时,更改会影响两个数组,因为扩展运算符仅复制对原始数组元素的引用。
像执行array2 = [...array1];
一样array2 = [array1[0], array1[1]];
,所以数组元素指向相同的内存位置。
如果您需要深层复制,则需要像使用JSON.stringify一样序列化/反序列化。