首页 > 解决方案 > 数组副本的变异也会改变原始数组!为什么?

问题描述

我有以下函数将矩阵旋转 90 度,这是代码

function rotateMatrix(array) {
    let counter = 0;
    let resultArr = array.slice();
    let i = 0,
        k = 0,
        p = 0;
        j = array.length - 1;
    console.log(array === resultArr); //false


    while (counter <= Math.pow(array.length, 2)) {
        if (i < array.length) {
            resultArr[k][p] = array[i][j];
            i++;
            p++;
        } else {
            j--;
            k++;
            i = 0;
            p = 0;
        }
    }
    return resultArr;
}

即使我在尝试改变 resultArr 以插入旋转矩阵的值时创建了一个数组副本,但当我比较 (resultArr === array) 时,这两个数组 (resultArr & array) 都会发生变异错误的。

正如您在此处看到的: 在调试器中捕获两个数组

有谁知道为什么会这样?

标签: javascriptarrays

解决方案


如果要创建一个全新的二维数组,可以使用如下代码:

const array=[[1,2],[3,4]], array2=array.slice().map(el=>el.slice()); console.log(array2==array); // false console.log(array2[0]==array[0]); // false

或者

const array=[[1,2],[3,4]], array2=Array.from(array).map(el=>Array.from(el));


推荐阅读