javascript
JavaScript数据结构与算法——数组详解(下)
1、二維與多維數(shù)組
JavaScript只支持一維數(shù)組,但是通過在數(shù)組里保存數(shù)組元素的方式,可以輕松創(chuàng)建多維數(shù)組。
1.1 創(chuàng)建二維數(shù)組
二維數(shù)組類似一種由行和列構(gòu)成的數(shù)組表格,在JavaScript中創(chuàng)建數(shù)組,需要先創(chuàng)建一個一維數(shù)組,然后讓數(shù)組的每個元素也是一個數(shù)組,創(chuàng)建二維數(shù)組時,起碼需要知道要創(chuàng)建的二維數(shù)組有多少行,比如:
var arr = []for(var i = 0; i < 5; i++) {arr[i] = []}以上創(chuàng)建了一個5行1列的二維數(shù)組,數(shù)組中每個元素都為undefined。
(1)我們可以在創(chuàng)建二維數(shù)組時傳入更多的信息,比如行數(shù)、列數(shù)、初始值等。
function setDyadicArr(rows, cols, initial) {var arr = []for (var i = 0; i < rows; i++) {var columns = []for (var j = 0; j < cols; j++) {columns[j] = initial}arr[i] = columns}return arr}// 創(chuàng)建一個3行4列,初始值為1的二維數(shù)組var dyadicArr = setDyadicArr(3, 4, 1)console.log(dyadicArr)運(yùn)行結(jié)果如下:
(2)創(chuàng)建二維數(shù)組更快捷的方式
var dyadicArr = [[1,2,3], [4,5,6], [77, 88, 99]]console.log(dyadicArr[2][1])測試:
1.2 處理二維數(shù)組的元素
處理二維數(shù)組中的元素,有兩種最基本的方式:按列訪問和按行訪問。
(1)按列訪問;按列訪問時,外層循環(huán)對應(yīng)行,內(nèi)層循環(huán)對應(yīng)列。
var dyadicArr = [[1,2,3], [4, 5, 6], [33, 44, 55]]var sum = 0for (var row = 0; row < dyadicArr.length; row++) {for (var col = 0; col < dyadicArr[row].length; col++) {sum += dyadicArr[row][col]}}console.log(sum)運(yùn)行結(jié)果為二維數(shù)組中所有元素的和:153。
(2)按行訪問;按行訪問時,外層循環(huán)對應(yīng)列,內(nèi)層循環(huán)對應(yīng)行。
var dyadicArr = [[1,2,3], [4, 5, 6], [33, 44, 55]]var sum = 0for (var col = 0; col < dyadicArr.length; col++) {for (var row = 0; row < dyadicArr[col].length; row++) {sum += dyadicArr[row][col]}}console.log(sum)運(yùn)行結(jié)果同樣為:153
1.3 參差不齊的數(shù)組
參差不齊的數(shù)組指的是數(shù)組中每行元素個數(shù)不相同的數(shù)組,比如[[1, 2, 3], [4, 5, 6, 7]]。
(1)如按列訪問,會出錯,比如:
var dyadicArr = [[1,2,3], [4, 5, 6], [33, 44, 55, 666]]var sum = 0for (var col = 0; col < dyadicArr.length; col++) {for (var row = 0; row < dyadicArr[col].length; row++) {sum += dyadicArr[row][col]}}console.log(sum)運(yùn)行結(jié)果為:
為什么會出錯呢?因?yàn)閏ol為2的時候,內(nèi)層循環(huán)相當(dāng)于for(var row = 0; row < 4; row++),而第一第二行中dyadicArr[3][2]是不存在的,所以會報Cannot read property '2' of undefined錯誤。
(2)參差不齊的數(shù)組只可以按列訪問,這樣的話外層循環(huán)是行,行是固定的,所以能訪問成功。
var dyadicArr = [[1,2,3], [4, 5, 6], [33, 44, 55,666]]var sum = 0for (var row = 0; row < dyadicArr.length; row++) {for (var col = 0; col < dyadicArr[row].length; col++) {sum += dyadicArr[row][col]}}console.log(sum)運(yùn)行結(jié)果為:
2、對象數(shù)組
到現(xiàn)在為止,我們只討論了只包含基本數(shù)據(jù)類型的元素的數(shù)組,比如數(shù)字和字符串。js中的數(shù)組還可以包含對象,數(shù)組的方法和屬性依然適用。
(1)創(chuàng)建對象數(shù)組
function Init(x, y) {this.x = xthis.y = y}var object1 = new Init(1, 2)var object2 = new Init(3, 4)var object3 = new Init(66, 77)var objectArr = [object1, object2, object3]console.log(objectArr)運(yùn)行結(jié)果:
(2) 訪問對象數(shù)組,以下代碼需結(jié)合(1)
for (var i = 0; i < objectArr.length; i++) {console.log('x: ' + objectArr[i].x + ' y: ' + objectArr[i].y)}運(yùn)行結(jié)果:
(3)添加對象到數(shù)組
var object4 = new Init(55, 99)objectArr.push(object4)console.log(objectArr)運(yùn)行結(jié)果:
3、對象中的數(shù)組
在對象中,可以使用數(shù)組存儲復(fù)雜的數(shù)據(jù)。
以下為一個object對象,對象有兩個方法,一個是添加成績,一個是求平均值,對象的grades屬性為數(shù)組類型,用于保存學(xué)生分?jǐn)?shù)。
var object = {grades: [],add: function (param) {this.grades.push(param)return this},average: function () {var total = 0for (var i = 0; i < this.grades.length; i ++) {total += this.grades[i]}console.log(total/ this.grades.length)}}object.add(55).add(66).add(77).add(88)object.average()運(yùn)行結(jié)果為分?jǐn)?shù)的平均值:71.5
解釋:我之所以在add()方法返回this,是想鏈?zhǔn)秸{(diào)用add(),簡少代碼。
JavaScript數(shù)據(jù)結(jié)構(gòu)與算法——數(shù)組詳解系列總結(jié)完畢~~~
有錯誤的地方歡迎指出,O(∩_∩)O~~
(2018.04.01-星期天-廣州·天河)
總結(jié)
以上是生活随笔為你收集整理的JavaScript数据结构与算法——数组详解(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 抖音上很火的个性签名208个
- 下一篇: 水杯创意宣传文案29句