07------數組深入

認識數組

  • 內置對象是JS語言自帶的對象,提供了一些基本的功能供開發者使用。常用的內置對象有Math、String、Array、Date等。
  • 對象:屬性(變量)和方法(函數)的集合
  • 數組就是對象
  • 可以存儲多個不同類型的數據

創建數組

1.內存

  • 棧區:基本數據類型保存在棧區,會根據函數的結束而自動釋放
  • 堆區:需要手動開闢,並且需要手動釋放

2.new

  • 在堆區開闢內存空間來存儲對象
  • 返回堆區對象的引用
  • 通過棧區的引用,訪問堆區的對象
var arr = new Array()
//  棧區        堆區
//  變量        數組對象

3.創造函數法創建數組

  • 創建空數組:var arr = new Array()
  • 創建確定容量的數組:var arr = new Array(10)
  • 創建一個擁有一些數據的數組:var arr = new Array(1,2,“alice”)

4.字面量法創建數組

  • 創建空數組:var arr = [];
  • 創建一個擁有一些數據的數組:var arr = [1,2,“alice”]

數組的訪問(賦值與取值)

1.數組元素的訪問

  • 直接通過數組下標訪問

2.賦值與取值

  • 通過數組下標取值,並可以對其進行賦值
var arr = [1,2,3,4,5]
//取值
console. log(arr[1]) // 2
// 賦值
arr[1] = 6
console. log(arr[1]) // 6

數組的遍歷

1.快速遍歷:for-in

  • in的前面針對於數組來說是數組下標
var arr = [1,2,3,4,5]
for(var i in arr){
   console.log(i) // 0 1 2 3 4
   console.log(arr[i])// 1 2 3 4 5
}

2.for循環遍歷

  • for循環按順序遍歷
var arr = [1,2,3,4,5]
for(var i = 0;i < arr.length;i++){
   console.log(arr[i])// 1 2 3 4 5
}

3.forEach()遍歷

  • ECMAScript5.0加入的新方法,低版本IE中不支持
var arr = [1,2,3,4,5]
arr.forEach(function(item,index)){
	console.log(index + "-" + item)
}
// 0-1 1-2 2-3 3-4 4-5

數組的長度,元素的更新 增加和刪除

數組長度

  • 數組元素的個數
  • length不計算非正規(數字)下標
  • 數組最多可以包含4294967295個項,基本上可以滿足任何編程要求

數組長度的增加

  • 數組長度的增加,默認賦值爲undefined
var arr = [1,2,3]
arr.length = 5
console.log(arr) // [1,2,3,undefined,undefined]

數組長度的減少

  • 數組長度的減少,多餘的刪除
var arr = [1,2,3,4,5]
arr.length = 3
console.log(arr) // [1,2,3]

添加數組元素

var arr = [1,2,3]
arr[2]= 10
console.log(arr) // [1,2,10]
arr[5]= 20
console.log(arr) // [1,2,10,undefined,undefined,20]

刪除數組元素

  • 用delete操作符來刪除指定的元素
  • 注意:數組長度不會改變,只是對應的值爲undefined
var arr = [1,2,3,4,5]
delete arr[2]
console.log(arr) // [1,2,undefined,4,5]

數組中常用的方法

1.push(item1,item2,…)

  • 功能:在數組的末尾添加一個或者多個元素
  • 參數:要添加的元素
  • 返回值:添加數據後數組的長度
var arr = [1,2,3]
var result = arr.push(4,5,6)
console.log(result) // 6
console.log(arr) // [1,2,3,4,5,6]

2.unshift(item1,item2,…)

  • 功能:在數組的開頭添加一個或者多個元素
  • 參數:要添加的元素
  • 返回值:添加數據後數組的長度
var arr = [1,2,3]
var result = arr.push(4,5,6)
console.log(result) // 6
console.log(arr) // [4,5,6,1,2,3]

3.pop()

  • 功能:刪除數組末尾的一個元素
  • 參數:無
  • 返回值:被刪除的元素
var arr = [1,2,3]
var result = arr.pop()
console.log(result) // 3
console.log(arr) // [1,2]

4.shift()

  • 功能:刪除數組開頭的一個元素
  • 參數:無
  • 返回值:被刪除的元素
var arr = [1,2,3]
var result = arr.shift()
console.log(result) // 1
console.log(arr) // [2,3]

5.join(str)

  • 功能:將數組的元素用參數字符串拼接成一個新的字符串
  • 參數:一個字符串
  • 返回值:拼接的結果
var arr = [1,2,3]
var result = arr.join('-')
console.log(result) // 1-2-3
console.log(arr) // [1,2,3]

6.reverse()

  • 功能:倒置數組元素
  • 參數:無
  • 返回值:倒置以後的數組
  • 注意:將會改變原數組
var arr = [1,2,3]
var result = arr.reverse()
console.log(result) // [3,2,1]
console.log(arr) // [1,2,3]

7.slice(startIndex,endIndex)

  • 功能:在數組中,從startIndex下標開始一直截取到endIndex下標之前
  • 參數:開始和結束下標
  • 返回值:截取的數據數組
  • 注意:不包含endIndex下標處的元素
  • 注意:不會改變原數組
var arr = [1,2,3,4,5,6]
var result = arr.slice(1,3)
console.log(result) // [2,3]
console.log(arr) // [1,2,3,4,5,6]

8.splice(下標,個數,item1,item2,…)

  • 功能:在數組的中間添加或者刪除一些元素

添加

// 
var arr = [1,2,3,4,5,6]
var result = arr.splice(1,2,8,9)
console.log(result) // [2,3]
console.log(arr) // [1,8,9,4,5,6]
// 如果下標大於原數組最大的下標,都是在數組最後添加元素
var result1 = arr.splice(8,2,8,9)
console.log(arr) // [1,8,9,4,5,6,8,9]
console.log(result1) // []

刪除

// 刪除
var arr = [1,2,3,4,5,6]
var result = arr.splice(1,2)
console.log(result) // [2,3]
console.log(arr) // [1,4,5,6]
// 如果省略可選參數,則從下標開始刪除對應個數的元素,返回刪除的元素數組
var result1 = arr.splice(1,1)
console.log(arr) // [1,5]
console.log(result1) // [4]
  • 參數

    • 下標:必需。規定從何處添加/刪除元素,該參數是開始插入或刪除的數組元素的下標,必須是數字。
    • 個數:必需。規定應該刪除多少元素。必須是數字,但是可以是0。如果未規定此參數,則刪除從index開始到原數組結尾的所有元素。
    • item1,item2,…:要添加到數組的新元素。
  • 返回值:含有被刪除的元素的數組

  • 注意:將會改變原數組

9.concat()

  • 功能:將多個數組拼接成一個數組
  • 參數:一個或多個數組或者元素
  • 返回值:拼接之後新的數組
  • 注意:拼接後數組的元素將按照傳入參數的順序排列
  • 注意:不改變原數組
var arr = [1,2]
var arr2 = arr.concat([3,4], 'a', true)
console.log(arr) //[1,2]
console.log(arr2) //[1,2,3,4,'a',true]

10.indexOf(item)

  • 功能:從數組的左側開始查找對應第一次出現的參數元素的下標
  • 參數:要查找的元素值
  • 返回值:如果找到了對應的元素則返回該元素的下標值,否則返回-1
var arr = [1,2,3,4,5]
var result = arr.indexOf(4)
console.log(arr) // [1,2,3,4,5]
console.log(result) // 3
console.log(arr.indexOf(6)) // -1

11.lastIndexOf(item)

  • 功能:從數組的右側開始查找對應第一次出現的參數元素的下標
  • 參數:要查找的元素值
  • 返回值:如果找到了對應的元素則返回該元素的下標值,否則返回-1
var arr = [1,2,3,4,5]
var result = arr.lastIndexOf(4)
console.log(arr) // [1,2,3,4,5]
console.log(result) // 3
console.log(arr.lastIndexOf(6)) // -1

數組排序

1.冒泡排序

  • 原理:冒泡排序的基本思想是,對相鄰的元素進行兩兩比較,順序相反則進行交換,這樣,每一趟會將最小或者最大的元素浮到頂端,最終達到完全有序。
  • 公式
var arr = [4,5,2,8,6]
for(var i = 0; i < arr.length; i++){
	for(var j = 0; j < arr.length - 1 - i; j++){
		if(arr[j] <= arr[j+1]) {
			var temp = arr[j]
			arr[j] = arr[j+1]
			arr[j+1] = temp
		}
	}
}
console.log(arr) // [8,6,5,4,2]

2.sort()

  • 默認升序排序
var arr = [4,5,2,3,1,7]
arr.sort()
console.log(arr) // [1,2,3,4,5,7]
  • sort()調用每一項的toString()方法,然後比較得到的字符串,確定如何排序
  • 排降序,需要給出排序的標準,排序的標準是一個函數
var arr = [4,5,2,3,1,7]
//降序
arr.sort(function(v1,v2){
	if(v1 < v2) {
		return 1
	}
	return -1
})
console.log(arr) // [7,5,4,3,2,1]

多維數組

迭代方法

  • ECMAScript5爲數組定義了5個迭代方法,每個方法接收2個參數,一個是每一項運行的函數,一個是運行該函數的作用域對象,傳入這些方法的函數會接受三個參數:數組項的值,該項在數組中的位置,數組對象本身。

1.every()

  • 對數組中的每一項運行給定函數,如果該數組中每一項都返回true,則返回true
var arr = [1,2,3,4,5]
var result = arr.every(function(item, index, arr){
	return item > 2
})
console.log(result) // false

2.filter()

  • 對數組中的每一項運行給定函數,返回該函數返回true的項組成的數組
var arr = [1,2,3,4,5]
var result = arr.filter(function(item, index, arr){
	return item > 2
})
console.log(result) // [3,4,5]

3.forEach()

  • 對數組中的每一項運行給定函數,這個方法沒有返回值
var arr = [1,2,3,4,5]
arr.forEach(function(item, index, arr){
	// todo
})

4.map()

  • 對數組中的每一項運行給定函數,返回每次函數調用的結果組成的函數
var arr = [1,2,3,4,5]
var result = arr.map(function(item, index, arr){
	return item * 2
})
console.log(result) // [2,4,6,8,10]

5.some()

  • 對數組中的每一項運行給定函數,只要其中有一項返回true,則返回true。與every()相反
var arr = [1,2,3,4,5]
var result = arr.some(function(item, index, arr){
	return item > 2
})
console.log(result) // true

歸併方法

  • ECMAScript5還新增了2個歸併方法,這兩個方法都會迭代數組的所有項,然後構建成一個最終返回的值

1.reduce()

  • 語法:arr.reduce([callback,initialValue])
    (1).callback(previousValue,currentValue,currentIndex,array)

    • 這個函數返回的任何值都會作爲第一個參數自動傳遞給下一項
    • previousValue:上一次調用回調函數返回的值,或者是提供的初始值(initialValue)
    • currentValue:數組中當前被處理的元素
    • currentIndex:當前被處理元素在數組中的索引,即currentValue的索引。如果有initialValue初始值,從0開始,否則從1開始。
    • array:調用reduce()的數組
      (2).initialValue:可選參數,作爲第一次調用callback的第一個參數
  • 例子

var arr = [1,2,3,4,5]
var result = arr.reduce(function(prev,cur,index,array) {
	// 實現數組元素累加求和
	return prev + cur
})
console.log(result) // 15

2.reduceRight()

  • 從數組的最後一項開始,向前遍歷到第一項
  • 與reduce()一樣,方向相反
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章