【问题标题】:Javascript copy array. Changes affect both arraysJavascript 复制数组。更改会影响两个数组
【发布时间】:2020-06-29 15:00:05
【问题描述】:

我正在尝试复制一个二维数组,但每次我更改复制数组的值时,它也会更改原始数组。

原始数组

 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 数组。我尝试使用and = [...board]; 复制并遇到了同样的问题。

【问题讨论】:

标签: javascript


【解决方案1】:

当您通过.slice[...] 复制时,它会执行 复制,这意味着外部数组被复制但内部数组不被复制。您可以单独复制每个元素:

let ans = board.map(v => v.slice()); // copies every 1d array

【讨论】:

    【解决方案2】:

    发生这种情况是因为 slice() 方法返回元素的浅拷贝,而元素的复制方式是使用引用,即原始数组和新数组都引用同一个对象。如果引用的对象发生更改,则更改对新数组和原始数组均可见。

    仅当您希望父数组的浅表副本产生一些其他输出时才使用切片。

    您可以阅读更多here

    【讨论】:

      猜你喜欢
      • 2014-08-04
      • 1970-01-01
      • 2011-09-30
      相关资源
      最近更新 更多