二维和多维数组

JavaScript只支持一维数组,但是通过在数组里保存数组元素的方式,可以轻松创建多维数组。

1. 创建二维数组

二维数组类似一种由行和列构成的数据表格。在JavaScript中创建二维数组,需要先创建一个数组,然后让数组的每个元素也是一个数组。其实例代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Array.matrix = function(numrows,numcols,initial){
var arr = [];
for(var i = 0 ; i < numrows ; ++i){
var columns = [];
for(var j = 0 ; j < numcols ; ++j){
columns[j] = initial;
}
arr[i] = columns;
}
return arr;
}

//测试代码1
var nums = Array.matrix(5,5,0);
console.log(nums[1][1]); // 0
//测试代码2
var names = Array.matrix(3,3,"");
names[1][2] = "Joe";
console.log(names[1][2]); // "Joe"

2. 处理二维数组的元素

处理二维数组中的元素,有两种最基本的方式:按列访问和按行访问。

2.1 按列访问

对于按列访问,外层循环对应行,内层循环对应列。我们以grades为例,每一行对应一个学生的成绩记录。我们可以将该学生的所有成绩相加,然后除以科目数得到该学生的平时成绩。示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var grades = [[89,77,78],[76,82,81],[91,94,89]];
var total = 0;
var average = 0.0;
for(var row = 0 ; row < grades.length ; ++row){
for(var col = 0 ; col < grades[row].length ; ++col){
total += grades[row][col];
}
average = total / grades[row].length;
console.log("Student " + parseInt(row + 1) + " average: " + average.toFixed(2));
total = 0;
average = 0.0;
}

//控制台打印出:
// Student 1 average: 81.33
// Student 2 average: 79.67
// Student 3 average: 91.33

2.2 按行访问

对于按行访问,只需要稍微调整for循环的顺序,使外层循环对应列,内层循环对应行即可。下面这段示例代码计算了一个学生各科的平均成绩:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var grades = [[89,77,78],[76,82,81],[91,94,89]];
var total = 0;
var average = 0.0;
for(var col = 0 ; col < grades.length ; ++col){
for(var row = 0 ; row < grades[col].length ; ++row){
total += grades[row][col];
}
average = total / grades[col].length;
console.log("Test " + parseInt(col + 1) + " average: " + average.toFixed(2));
total = 0;
average = 0.0;
}

//控制台打印出:
// Test 1 average: 85.33
// Test 2 average: 84.33
// Test 3 average: 82.67