天天看點

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 為例,每一行對應一個同學的成績記錄。可以将該同學的所有成績相加,然後除以科目數得到該同學的平均成績。

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

繼續閱讀