为什么在数组中移动数组会影响复制的(而不是通过引用)数组,但是移动整个初始数组却不会呢? (JavaScript)

时间:2019-07-08 20:02:12

标签: javascript multidimensional-array

我试图移动一个数组并使用该数组,然后使用复制的数组将其设置为原始值,该复制的数组不是通过引用复制的。出于某些原因,将数组从原始数组移出不会影响复制的数组,但是从初始数组中的数组内部移出元素会影响复制的数组。如何复制数组,对其进行修改,使用它,然后将其设置回其原始形式?

我最初遇到麻烦是因为我要通过引用进行复制,但是后来我了解到,使用rest运算符可以复制数组(而不是通过引用进行复制)。看来这两个数据仍保持链接。

var m = [[1,2,3],[4,5,6],[7,8,9]]
var matrix = [...m]
m.shift();
console.log(matrix);
m[0].shift();
console.log(m);
console.log(matrix);

预期:

[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
[ [ 5, 6 ], [ 7, 8, 9 ] ]
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]

实际:

[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
[ [ 5, 6 ], [ 7, 8, 9 ] ]
[ [ 1, 2, 3 ], [ 5, 6 ], [ 7, 8, 9 ] ]

1 个答案:

答案 0 :(得分:1)

问题是当您执行(gdb) b foo.f:10 if i .eq. 0 Breakpoint 1 at 0x432738: file foo.f, line 10. 时,第二级数组仍通过引用传递。我不确定您如何仍然可以使用rest运算符,但是您可以做的另一件事是:

[...m]

避免出现问题。

var matrix = JSON.parse(JSON.stringify(m));