1. 程式人生 > >Javascript 陣列語法詳解

Javascript 陣列語法詳解

JavaScript 中的陣列相當於 Java 中的 Map ,陣列本身是一個物件,屬於引用資料型別

更多精彩

定義

  1. 既然陣列是一個物件,當進行 alert(arr) 時
  2. 應該輸出 [object object] ,可是卻輸出的是陣列中具體的值
  3. 因為 alert() 會對將要輸出的值進行隱式的 toString() 轉換
  4. 通過轉換,陣列 arr 便直接輸出其內部值
var arr = new Array(6)		// 甚至不用預先宣告,不用 new
var arr = [1, 2, 3, 'aa', new Date(), true] // 元素型別可任意選擇 alert(arr) // 顯示 1,2,3,4,aa,true arr.length = 5 alert(arr) // 顯示 1,2,3,4,aa ,由於陣列長度的改變,大於 5 的部分被自動捨棄,長度可以隨意改變

push

  1. 往指定陣列尾部推送值,並返回值
var arr = []
arr.push(1)		
arr.push(2, 3)	// 可以是單個值,也可以是多個值
var result = arr.push(4, 5)		
alert(arr)		// 顯示 1,2,3,4,5 表示通過 push() 推送到陣列中的值不會被覆蓋
alert(result) // 顯示 5 ,push() 在推送值的同時,可以返回陣列的當前長度

pop

  1. 從指定陣列尾部移除一個元素,並返回值
var arr = [1, 2, 3, 4, 'aa']
var result = arr.pop()		
alert(arr)		// 顯示 1,2,3,4
alert(result)		// 顯示 aa ,pop() 在移除元素的同時會將被移除的值作為返回值 

shift

  1. 從指定陣列頭部移除一個元素,並返回值
var arr = ['aa', 1, 2, 3, 4]
var result = arr.
shift() alert(arr) // 顯示 1,2,3,4 alert(result) // 顯示 aa ,shift() 在移除元素的同時會將移除的值作為返回值

unshift

  1. 往指定陣列頭部推送值,並返回值
var arr = [1, 2, 3, 4]
var result = arr.unshift('aa', 'bb')
alert(arr)		// 顯示 aa,bb,1,2,3,4
alert(result)		// 顯示 6 ,unshift() 在推送值的同時,可以返回陣列的當前長度

splice(startIndex, spliceLength, var1, var2, … varN)

  1. 擷取字串的同時,拼接新字串到指定位置
  2. startIndex 擷取的起始位置
  3. spliceLength 擷取的長度
  4. var1, var2, … varN 待拼接的新字串
var arr = [1, 2, 3, 4, 5]
arr.splice(1, 2, 3, 4, 5)
alert(arr)		// 顯示 1,3,4,5,4,5 從陣列 arr 的索引 1 開始,擷取長度為 2 ,將 [2, 3] 替換為 [3, 4, 5]
	
var arr1 = [1, 2, 3, 4, 5]
arr1.splice(1, 2)
alert(arr1)		// 顯示 1,4,5 從陣列 arr1 的索引 1 開始,擷取長度為 2 ,且無帶拼接字串

var arr2 = [1, 2, 3, 4, 5]
arr2.splice(1)
alert(arr2)		// 顯示 1 ,從陣列 arr2 的所以 1 開始,在未指定長度的情況下,後續字串全部截斷

slice

  1. 擷取字串
  2. 不運算元組本身,而是返回被擷取的內容
var arr = [1, 2, 3, 4, 5]
var result = arr.slice(2, 4)		// 採用左閉右開區間 [2, 4) 也就是索引從第 2 位開始,到第 4 位結束,且不包括第 4 位
alert(result)		// 顯示 3,4

concat

  1. 在指定陣列後連線新的陣列或值
  2. 不運算元組本身,而是返回連線後的結果
var arr1 = [1, 2, 3]
var arr2 = [4, 5]
var result = arr1.concat(arr2)		// 將 arr1 和 arr2 進行連線,並返回結果
alert(result)		// 顯示 1,2,3,4,5
var result2 = arr1.concat(4)		// 講 4 連線到 arr1 之後,並返回結果
alert(result2)		// 顯示 1,2,3,4

join

  1. 在指定陣列的每個元素之間插入值
  2. 不運算元組本身,而是返回連線後的結果
var arr = [1, 2, 3]
var result = arr.join('-')		// 在 arr 的每個元素之間新增 - 字元
alert(result)		// 顯示 1-2-3

sort

  1. 方法本身存在缺陷,無法直接對陣列進行正序或倒序的排序,需要自行傳入方法進行輔助操作
  2. 優化方式見 Javascript 陣列排序
var arr = [10, 2, 4, 1, 7]
arr.sort()		// 並非對 arr 進行正序排序,而是講陣列中的每個元素視為字串,講其中的各位進行分別比較
 					// 例如將 10 分為 1 和 0 ,然後先將 1 和 2 4 7 比較,則認為 10 比 2 4 7 小
 					// 再將 1 和 1 比較,在相等的情況下則發現 10 比 1 還多一個 0 ,所以將 10 排在 1 之後
alert(arr)		// 顯示 1,10,2,4,7
	 
// 用於輔助 sort() 進行排序的方法
// 若需要正序排序,則在 value1 < value2 的情況下返回 -1 ,在 value1 > value2 的情況下返回 1
// 若需要倒序排序,則在 value1 < value2 的情況下返回 1 ,在 value1 > value2 的情況下返回 -1
function compare(value1, value2) {
	if (value1 < value2) {
		return -1
	} else if (value1 > value2) {
		return 1
	} else {
		return 0
	}
}
	 
var arr = [10, 2, 4, 1, 7]
arr.sort(compare)		// 將寫好的 compare 方法傳入 sort() 中,則進行正序或倒序排序,具體情況根據 compare 中返回值決定
alert(arr)		// 顯示 1,2,4,7,10

reverse

  1. 對陣列中的內容進行反向輸出
var arr = [10, 2, 4, 1, 7]
arr.reverse()		// 直接將陣列中的內容反向輸出,而不是倒序
alert(arr)		// 顯示 7,1,4,2,10

indexOf(value)

  1. 在指定陣列中從第一個元素開始查詢傳入值的索引位置
  2. 返回值為 -1 表示未找到對應值的索引
var arr = [1, 2, 3, 4, 5, 4, 3, 2, 1]
var index = arr.indexOf(4)		// 在陣列 arr 中查詢數值 4 的索引位置,從第一個元素(索引為 0)開始計算,並返回索引值
alert(index)		// 顯示 3

indexOf(startIndex, value)

  1. 從指定的索引開始,在指定數值中查詢傳入值的索引位置
  2. startIndex 開始查詢的索引
  3. value 傳入值
var arr = [1, 2, 3, 4, 5, 4, 3, 2, 1]
var index = arr.indexOf(4, 4)		// 在陣列 arr 中,從第 4 個索引開始,查詢數值 4 的索引位置,並返回索引值
alert(index)		// 顯示 5

lastIndexOf(value)

  1. 在指定陣列中從最後一個元素開始查詢傳入值得索引位置
var arr = [1, 2, 3, 4, 5, 4, 3, 2, 1]
var index = arr.lastIndexOf(2)		// 在陣列 arr 中從最後一個元素開始查詢數值 2 的索引位置,並返回索引值
alert(index)		// 顯示 7

lastIndexOf(startIndex, value)

  1. 從指定的索引開始,在指定陣列中從最後一個元素開始查詢傳入值的索引位置
  2. startIndex 開始查詢的索引
  3. value 傳入值
var arr = [1, 2, 3, 4, 5, 4, 3, 2, 1]
var index = arr.lastIndexOf(2, 2)		// 在陣列 arr 中從倒數第 2 個索引開始,查詢數值 2 的索引位置,並返回索引值
alert(index)		// 顯示 1

every(function(item, index, array) { … })

  1. 對陣列中的每個元素進行函式運算,並將總結果返回
  2. 如果每個值得運算結果都返回 true ,則整體返回 true
  3. 如果存在一個值運算結果返回 false ,則整體返回 false
var arr = [1, 2, 3, 4, 5, 4, 3, 2, 1]
// 方法體記憶體在一個回撥函式
// item 為數值中當期元素
// index 為當前索引值
// array 為指定陣列
var result = arr.every(function(item, index, array) {
	// 判斷陣列中的當前元素是否大於 2 ,結果返回 true 或 false
	return item > 2
})
alert(result)		// 顯示 false

filter(function(item, index, array) { … })

  1. 對陣列中的每個元素進行函式運算,並將過濾後的結果返回
var arr = [1, 2, 3, 4, 5, 4, 3, 2, 1]
var result = arr.filter(function(item, index, array) {
	// 判斷陣列中的當前元素是否大於 2 ,不滿足條件則過濾掉
	return item > 2	
})
alert(result)		// 顯示 3,4,5,4,3

forEach(function(item, index, array) { … })

  1. 對陣列中的每個元素進行遍歷,並可在其中執行一個方法
var arr = [1, 2, 3, 4, 5, 4, 3, 2, 1]
// for 迴圈的升級版
arr.forEach(function(item, index, array) {
	alert(item)		// 迴圈顯示 1 2 3 4 5 4 3 2 1	
})

map(function(item, index, array) { … })

  1. 對陣列中的每個元素進行函式運算,並返回新的陣列
var arr = [1, 2, 3, 4, 5, 4, 3, 2, 1]
var result = arr.map(function(item, index, array) {
	// 將陣列中每個元素都乘以 2
	return item * 2
})
alert(result)		// 顯示 2,4,6,8,10,8,6,4,2

some(function(item, index, array) { … })

  1. 對陣列中的每個元素進行函式運算,並將總結果返回
  2. 如果存在一個得運算結果都返回 true ,則整體返回 true
  3. 如果所有值運算結果返回 false ,則整體返回 false
  4. 與 every() 邏輯正好相反
var arr = [1, 2, 3, 4, 5, 4, 3, 2, 1]
var result = arr.some(function(item, index, array) {
	// 判斷陣列當前元素是否大於等於 5 ,返回 true 或 false
	return item >= 5
})
alert(result)		// 顯示 true

reduce(function(prev, cur, index, array) { … })

  1. 從左遍歷陣列的每個元素進行函式運算,並將總結果返回
  2. prev 當前值的前一個值
  3. cur 當前值
  4. index 當前值的索引值
  5. array 當前陣列
var arr = [1, 2, 3, 4, 5, 4, 3, 2, 1]
var result = arr.reduce(function(prev, cur, index, array) {
	// 當前值的前一個值 + 當前值 ,全部遍歷結束後,再返回總和
	// 0 + 1 + 2 + 3 + 4 + 5 + 4 + 3 + 2 + 1
	return prev + cur	
})
alert(result)		// 顯示 25

reduceRight(function(prev, cur, index, array) { … })

  1. 從右遍歷陣列的每個元素進行函式運算,並將總結果返回
  2. prev 當前值的前一個值
  3. cur 當前值
  4. index 當前值的索引值
  5. array 當前陣列
var arr = [1, 2, 3, 4, 5, 4, 3, 2, 1]
var result = arr.reduceRight(function(prev, cur, index, array) {
	// 當前值的前一個值 + 當前值 ,全部遍歷結束後,再返回總和
	// 0 + 1 + 2 + 3 + 4 + 5 + 4 + 3 + 2 + 1
	return prev + cur	
})
alert(result)		// 顯示 25