2014-10-19 59 views
1

我想「鏡像」(就像在鏡子中看到的那樣)一個二維數組。 數組看起來像這樣:JavaScript中的二維數組「鏡像」

array1 = [ 
    ['a','b','c'], 
    ['d','e','f'], 
    ['g','h','i'], 
    ['j','k','l'] 
]; 

我想創建一個新的陣列,其值「鏡子」第一陣列值,這樣的:

array2 = [ 
    ['a','e','i'], 
    ['b','f','j'], 
    ['c','g','k'], 
    ['d','h','l'] 
]; 

一直在嘗試與夫婦的事情反向()但我找不到解決方案。

編輯:在這種情況下,「鏡子」是指類似於克萊姆法則的東西: http://www.1728.org/cramer4d.png(見對角線)

編輯:我不好,我應該有複製校對我的職務。 第二個數組謹:

+2

http://stackoverflow.com/questions/4492678/to-swap-rows-with-columns-of-matrix-in-javascript-or-jquery – user2717954 2014-10-19 07:58:57

+0

@ user2717954這看起來並不像張貼問題OP。 – Matthias 2014-10-19 08:00:13

+2

你確定輸出不應該是一個3x4矩陣(這將是原來的4x3矩陣的轉置) – Niko 2014-10-19 08:03:53

回答

2

的基本思想是變平陣列的陣列,其中Array.prototype.reduce這樣

var array1 = [ 
    ['a', 'b', 'c'], 
    ['d', 'e', 'f'], 
    ['g', 'h', 'i'], 
    ['j', 'k', 'l'] 
]; 

var flatArray = array1.reduce(function(result, currentArray) { 
    return result.concat(currentArray); 
}, []); 

console.log(flatArray); 
# [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l' ] 

然後,對於每個元件,的長度後得到的元件單獨的陣列,這樣

var rows = array1.length, 
    cols = array1[0].length + 1, 
    result = []; 

for (var i = 0; i < rows; i += 1) { 
    var temp = []; 
    for (var j = 0; j < cols - 1; j += 1) { 
     temp.push(flatArray[i + (j * cols)]); 
    } 
    result.push(temp); 
} 

console.log(result); 

輸出

[ [ 'a', 'e', 'i' ], 
    [ 'b', 'f', 'j' ], 
    [ 'c', 'g', 'k' ], 
    [ 'd', 'h', 'l' ] ]