我试图移动一个数组并使用该数组,然后使用复制的数组将其设置为原始值,该复制的数组不是通过引用复制的。出于某些原因,将数组从原始数组移出不会影响复制的数组,但是从初始数组中的数组内部移出元素会影响复制的数组。如何复制数组,对其进行修改,使用它,然后将其设置回其原始形式?
我最初遇到麻烦是因为我要通过引用进行复制,但是后来我了解到,使用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 ] ]
答案 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));