我正在尝试在Javascript中创建方矩阵转置函数,但无法按预期工作。功能:
function transpose(){
var tmpCells = cells;
for(var i=0; i<boardHeight; i++){
for(var j=0; j<boardWidth; j++){
tmpCells[i][j] = cells[j][i];
}
}
cells = tmpCells;
clearCells();
drawCells();
}
创建奇怪的输出。它会丢失一些像元,而不是原来的大小的新2D数组,而是使用内部的
objects
创建大小不同的数组,而不是circular bjects
数组。如何解决此问题以及我做错了什么?JS小提琴链接:https://jsfiddle.net/Ls8jbho3/
最佳答案
因为tmpCells = cells
是对现有对象的新引用,而不是复制该对象,所以tmpCells[i][j] = cells[j][i]
与cells[i][j] = cells[j][i]
完全相同。这是所有问题的根源。
确保您的tmpCells
不与cells
共享结构,并且问题消失了:
function transpose(){
var tmpCells = [];
for(var i=0; i<boardHeight; i++){
tmpCells[i] = [];
for(var j=0; j<boardWidth; j++){
tmpCells[i][j] = cells[j][i];
}
}
cells = tmpCells;
}