还记得本章开头平均气温测量的例子吗?现在我打算再用一下,不过把记录的数据改成数天内每小时的气温。现在我们已经知道可以用数组来保存这些数据,那么要保存两天的每小时气温数据就可以这样:
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 1averageTemp[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 2averageTemp[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
语句,以此类推。