2016-07-25 67 views
0

我正在尝试在Javascript中创建方形矩阵转置函数,但它无法按预期工作。功能: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(); 
} 

创建奇怪的输出。它不是新的原始大小的二维数组,而是丢失了一些单元格,而不是数组objects,它创建了与circular bjects不同的大小的数组。如何解决这个问题以及我做错了什么?

JS拨弄链路:https://jsfiddle.net/Ls8jbho3/

回答

2

由于tmpCells = cells使得一个新的参考到现有的对象,而不是复制该对象,tmpCells[i][j] = cells[j][i]是完全一样cells[i][j] = cells[j][i]。这是你所有问题的根源。

确保您tmpCellscells共享结构,问题解决了:

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; 
} 
0

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

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