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 為例,每一行對應一個同學的成績記錄。可以将該同學的所有成績相加,然後除以科目數得到該同學的平均成績。
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 循環的順序,使外層循環對于列,記憶體循環對于行。以下計算一個同學各科的平均成績。
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