2016-07-25 40 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(); 
} 

は奇妙な出力を作成します。元のサイズの新しい2D配列の代わりに、いくつかのセルが欠けていて、代わりに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]] 
関連する問題