我正在尝试在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;
}

09-15 18:43