【发布时间】:2020-04-18 12:51:10
【问题描述】:
我有以下函数将矩阵旋转 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) 都会发生变异它给了我错误。
正如您在此处看到的: Capture of both arrays in the debbuger
有人知道为什么会这样吗?
【问题讨论】:
-
看起来你有一个数组数组。制作源数组的副本会复制行引用,但它不是 deep 副本。您必须复制两个维度。
-
@Pointy 我不确定我是否理解,您能否将我链接到解释其在 Javascript 中如何工作的文章或视频?谢谢你的回复:)
-
JavaScript 中的二维数组是一个数组,每个元素都是一个数组。您必须使用
.slice()复制外部数组的每个元素,以便您拥有两个维度的完整副本。
标签: javascript arrays