2016-07-25 86 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]]