Javascript中的方形矩阵转置

Square matrix transpose in Javascript

本文关键字:转置 方形矩 Javascript      更新时间:2023-09-26

我试图在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 fiddle链接: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;
}

mathjs可以做到这一点。以下是示例:

var A = [[1, 2, 3], [4, 5, 6]];
math.transpose(A);               // returns [[1, 4], [2, 5], [3, 6]]