javascript - 数组副本的变异也会改变原始数组!为什么?
问题描述
我有以下函数将矩阵旋转 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) 都会发生变异错误的。
正如您在此处看到的: 在调试器中捕获两个数组
有谁知道为什么会这样?
解决方案
如果要创建一个全新的二维数组,可以使用如下代码:
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));
推荐阅读
- c# - 棱镜:在外壳以外的另一个窗口中注册区域
- node.js - 以编程方式构建猫鼬查询
- asp.net-mvc - MVC ActionLink 404 错误
- java - 圆形点计数器 Java 或圆形进度条
- scala - reportFailure 方法在自定义 ExecutionContext 中实际做了什么
- r - 如何在 r 中创建索引矩阵?
- python - ConnectionError: ('Connection aborted.', gaierror(-2, 'Name or service not known'))
- php - Wappalyzer如何检测网页的技术
- javascript - Jquery:形式的.blur()上的功能,而不是元素
- angular - 哪个 Angular 模块将 [computed]="var" 转换为 computed="hello"?