還記得本章開頭平均氣溫測量的例子嗎?現在我打算再用一下,不過把記錄的數據改成數天內每小時的氣溫。現在我們已經知道可以用數組來保存這些數據,那麼要保存兩天的每小時氣溫數據就可以這樣:
var averageTempDay1 = [72,75,79,79,81,81];
var averageTempDay2 = [81,79,75,75,73,72];
然而,這不是最好的方法。我們可以做得更好。我們可以使用矩陣(二維數組)來存儲這些信息。矩陣的行保存每天的數據,列對應小時級別的數據:
var averageTemp = ;
averageTemp[0] = [72,75,79,79,81,81];
averageTemp[1] = [81,79,75,75,73,72];
JavaScript只支持一維數組,並不支持矩陣。但是,我們可以像上面的代碼一樣,用數組套數組,實現矩陣或任一多維數組。代碼也可以寫成這樣:
//day 1
averageTemp[0] = ;
averageTemp[0][0] = 72;
averageTemp[0][1] = 75;
averageTemp[0][2] = 79;
averageTemp[0][3] = 79;
averageTemp[0][4] = 81;
averageTemp[0][5] = 81;
//day 2
averageTemp[1] = ;
averageTemp[1][0] = 81;
averageTemp[1][1] = 79;
averageTemp[1][2] = 75;
averageTemp[1][3] = 75;
averageTemp[1][4] = 73;
averageTemp[1][5] = 72;
上面的代碼裡,我們分別指定了每天和每小時的數據。數組中的內容如下圖所示:
每行就是每天的數據,每列是當天不同時段的氣溫。
2.6.1 迭代二維數組的元素
如果想看這個矩陣的輸出,我們可以創建一個通用函數,專門輸出其中的值:
function printMatrix(myMatrix) {
for (var i=0; i<myMatrix.length; i++){
for (var j=0; j<myMatrix[i].length; j++){
console.log(myMatrix[i][j]);
}
}
}
需要遍歷所有的行和列。因此,我們需要使用一個嵌套的for
循環來處理,其中變量i
為行,變量j
為列。
使用以下代碼查看矩陣averageTemp
的輸出:
printMatrix(averageTemp);
2.6.2 多維數組
我們也可以用這種方式來處理多維數組。假如我們要創建一個3×3×3的矩陣,每一格裡包含矩陣的i
(行)、j
(列)及z
(深度)之和:
var matrix3x3x3 = ;
for (var i=0; i<3; i++){
matrix3x3x3[i] = ;
for (var j=0; j<3; j++){
matrix3x3x3[i][j] = ;
for (var z=0; z<3; z++){
matrix3x3x3[i][j][z] = i+j+z;
}
}
}
數據結構中有幾個維度都沒關係,我們都可以用循環遍歷每個維度來訪問所有格子。3×3×3的矩陣也可用立體圖表示如下:
可以用以下代碼輸出這個矩陣的內容:
for (var i=0; i<matrix3x3x3.length; i++){
for (var j=0; j<matrix3x3x3[i].length; j++){
for (var z=0; z<matrix3x3x3[i][j].length; z++){
console.log(matrix3x3x3[i][j][z]);
}
}
}
如果是一個3×3×3×3的矩陣,代碼中就會用四層嵌套的for
語句,以此類推。