我试图复制一个2D数组,但是每次我改变复制数组的值时,它也会改变原始数组的值。
原始数组
board = [
[0,1,0],
[0,0,1],
[1,1,1],
[0,0,0]
];
let ans = board.slice();
for(let i=0; i<board.length; i++){
for(let j=0; j<board[i].length; j++){
let neighbors = checkCell(board, i, j);
if(board[i][j] === 1) {
ans[i][j] = (neighbors === 2 || neighbors === 3 ? 1 : 0);
} else {
ans[i][j] = (neighbors === 3 ? 1 : 0);
}
}
}
checkCell()只是一个返回1或0的方法。 我的问题是,当我将一个值设置为ans
时,它还会更改原始的board
数组。 我尝试使用和=[...board];
进行复制,也遇到了同样的问题。
当您通过.slice
或[...]
进行复制时,它将执行浅层复制,这意味着复制了外部数组,但没有复制内部数组。 您可以单独复制每个元素:
let ans = board.map(v => v.slice()); // copies every 1d array