二維陣列簡單理解為一個陣列中的值有陣列型態
簡單的例子
1 | const array = [[1,2,3],[4,5,6],[7,8,9]] |
可以應用在一個有趣的試題
1 | 將 |
方法一:陣列轉置後再倒轉(reverse)
1 | const array = [[1,2,3],[4,5,6],[7,8,9]] |
思路
1 | //原本的array |
先將陣列轉置為:
1 | //newArray |
轉置的步驟拆解:
觀察newarray
的第[0]列中值的順序就是array
的每列中的第[0]的值
第[0]列中有幾個值,等於迴圈要跑幾次(第[0]列的長度)
1 | for(let i=0 ; i<array[0].length; i++) |
此時i
從0開始,
定義newArray
的第[0]列中的值為陣列型態
1 | newArray[i] = []; |
開始為newArray
第[0]列賦值array
本身陣列中有幾個值,等於迴圈要跑幾次
1 | for(let j=0 ; j<array.length ; j++ ){ |
1 | //組合 |
//依執行步驟演示一次,i
,j
直接以數字表示
1 | //array[0].length = 3; |
再用reverse掉換順序
1 | for(let i =0;i<newArray.length; i++){ |
DD後記:
沒有發現向右轉90度的呈現會和轉置再調換的一樣,其實一開始想的是方法二
方法二
1 | array = |
觀察array及要轉90度的newArray的規律
newArray裡的第[0]組陣列
newArray[0][0] = array[2][0]
newArray[0][1] = array[1][0]
newArray[0][2] = array[0][0]
newArray裡的第[1]組陣列(
newArray[1][0] = array[2][1]
newArray[1][1] = array[1][1]
newArray[1][2] = array[0][1]
newArray裡的第[2]組陣列
newArray[2][0] = array[2][2]
newArray[2][1] = array[1][2]
newArray[2][2] = array[0][2]
懶人包說明:newArray
第[0]列裡的值,等於array
第[2][1][0]列中第[0]個值newArray
第[1]列裡的值,等於array
第[2][1][0]列中第[1]個值newArray
第[2]列裡的值,等於array
第[2][1][0]列中第[2]個值
有比較好嗎?
先以i, j分別替代值,會發現有這樣的規律:
newArray[ i ][ j ] = array[array.lenth -1 - j ][ i ][arrary.lenth -1 - j]
會有點不直觀,必須一直找規律
其他迴圈跑的方式和方法一一樣,差別在不用再reverse()
1 | var array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; |
備註
- console.log出來會是一整列呈現,在此不多討論如何換行
- 對
[arrary.lenth -1 - j]
有好的解釋歡迎告訴我~