JavaScript数据结构 数组 3

JavaScript数据结构 ---- 数组

5.二维及多维数组
5.1 创建二维数组
二维数组类似一种由行和列构成的数据表格。在JavaScript中创建二维数组,需要先创建一个数组,然后让数组的每个元素也是一个数组。

var num = [[1,2,3],[4,5,6],[7,8,9]];
console.log(num[2][2]);  //9

可以写一个方法来创建数组,该方法根据传入的参数,设定数组的行数、列数及初始值。

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;
}

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

5.2 处理二维数组中的元素
处理二维数组中的元素,有两种基本方式:按列访问和按行访问。 我们以一组同学的成绩为例,来示范这两种方式。 使用一组嵌入式的 for 循环,对于按列访问,外层循环对应行,内层循环对应列。以数组 grades 为例,每一行对应一个同学的成绩记录。可以将该同学的所有成绩相加,然后除以科目数得到该同学的平均成绩。 ```js var grades = [[89,73,92], [76,87,99], [99,100,60]]; var total = 0; var average = 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; } //程序输出 /* Student1 average: 84.67 Student2 average: 87.33 Student3 average: 86.33 */ ``` 对于按行访问,只需稍微调整 for 循环的顺序,使外层循环对于列,内存循环对于行。以下计算一个同学各科的平均成绩。 ```js var grades = [[89,73,92], [76,87,99], [99,100,60]]; var total = 0; var average = 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; } //程序输出 /* Test1 average: 88.00 Test2 average: 86.67 Test3 average: 83.67 */ ```

6. 对象数组

数组可以包含对象,数组的方法和属性对对象依然适用。

function Point(x, y) {
	this.x = x;
	this.y = y;
}

function displayPts(arr) {
	for (var i = 0; i < arr.length; i++) {
		console.log(arr[i].x + ", " + arr[i].y);
	}
}

var p1 = new Point(1,2);
var p2 = new Point(3,5);
var p3 = new Point(2,8);
var p4 = new Point(4,4);
var points = [p1, p2, p3, p4];
for (var i = 0; i < points.length; i++) {
	console.log("Point " + parseInt(i+1) + ": " + points[i].x + ", " + points[i].y);
}
var p5  = new Point(12, -4);
points.push(p5);
console.log("After push: ");
displayPts(points);
//输入结果
/*
Point 1: 1, 2
Point 2: 3, 5
Point 3: 2, 8
Point 4: 4, 4
After push: 
9 1, 2
9 3, 5
9 2, 8
9 4, 4
9 12, -4
*/

7. 对象中的数组

在对象中,可以使用数组存储复杂的数据。以一个例子来说明。
我们创建了一个对象,用于保存观测到的最高周气温。该对象有两个方法,一个方法用来增加一条新的气温记录,另一个方法用来计算存储在对象中的平均气温。

function weekTemps() {
	this.dataStore = [];
	this.add = add;
	this.average = average;
}

function add(temp) {
	this.dataStore.push(temp);
}

function average() {
	var total = 0;
	for (var i = 0; i < this.dataStore.length; i++) {
		total += this.dataStore[i];
	}
	return total / this.dataStore.length;
}

var thisweek = new weekTemps();
thisweek.add(3);
thisweek.add(2);
thisweek.add(-1);
thisweek.add(0);
thisweek.add(5);
thisweek.add(10);
thisweek.add(1);
console.log(thisweek.average()); // 2.857142857142857

参考资料:
JavaScript高级程序设计
JavaScript MDN
Data Structures and Algorithms with JavaScript

原文地址:https://www.cnblogs.com/zhoufulin/p/4999451.html