下面以var arr = ['x', 'u', 'e', 'y', 'i', 'n', 'g']
為例
修改器方法:
修改器方法會改變原數(shù)組
1. arr.pop() && arr.push()
會改變原數(shù)組
arr.pop()
刪除數(shù)組最后一個元素勒叠,并返回這個元素
arr.pop() // "g"
arr.push()
在數(shù)組末尾增加一個元素爬范,返回數(shù)組的新長度
arr.push('l') // 8
arr // ["x", "u", "e", "y", "i", "n", "g", "l"]
2. arr.shift() && arr.unshift()
arr.shift() 刪除數(shù)組開頭第一個元素财著,并返回這個元素
arr.shift() // "x"
arr.unshift() 在數(shù)組開頭增加一個元素侧巨,返回數(shù)組新長度。
arr.unshift('l') // 8
arr // ["l", "x", "u", "e", "y", "i", "n", "g"]
3. arr.reverse()
會改變原數(shù)組
數(shù)組倒序射众,返回倒序后的數(shù)組
arr.reverse() // ["g", "n", "i", "y", "e", "u", "x"]
4. arr.sort() || arr.sort(compareFunction)
對數(shù)組進行排序澎胡,并返回排好序的當前數(shù)組。(寫得這么拗口是為了強調(diào)是原數(shù)組的順序改變)
.sort()
使用的是就地排序算法预厌,且不一定穩(wěn)定阿迈。
(就地排序意思是直接在原數(shù)組上排序。穩(wěn)定指的是兩個相等的元素排好序后前后順序不變)
默認排序順序是根據(jù)字符串Unicode碼點轧叽。
這意味著:
var scores = [1, 10, 21, 2];
scores.sort(); // [1, 10, 2, 21]
// 10在2之前,因為在 Unicode 指針順序中"10"在"2"之前
不過.sort()
可以接受一個函數(shù)作為參數(shù)苗沧,自己指定排序規(guī)則:
var scores = [1, 10, 21, 2];
scores.sort(function (a, b) { // 從小到大排序
return a - b
}) // [ 1, 2, 10, 21 ]
函數(shù)compareFunction 的規(guī)則如下:
- 如果 compareFunction(a, b) 小于 0 ,那么 a 會被排列到 b 之前炭晒;
- 如果 compareFunction(a, b) 等于 0 待逞, a 和 b 的相對位置不變。
備注: ECMAScript 標準并不保證這一行為网严,而且也不是所有瀏覽器都會遵守(例如 Mozilla 在 2003 年之前的版本)识樱; - 如果 compareFunction(a, b) 大于 0 , b 會被排列到 a 之前震束。
- compareFunction(a, b) 必須總是對相同的輸入返回相同的比較結(jié)果怜庸,否則排序的結(jié)果將是不確定的。
5. arr.splice(start, deleteCount, item1, item2, ...)
修改數(shù)組垢村,從start
開始割疾,刪除deleteCount
個元素,再插入后面的item1, item2, ...
// 從下標0開始嘉栓,刪除一個元素宏榕,并插入‘X'
arr.splice(0, 1, 'X') // ["x"]
arr // ["X", "u", "e", "y", "i", "n", "g"]
訪問方法:
訪問方法不會改變原數(shù)組,一般都是返回一個新數(shù)組
1. arr1.concat(arr2)
合并arr1
和arr2
var arr1 = ["x", "u", "e"]
var arr2 = ["y", "i", "n", "g"]
arr1.concat(arr2) // ["x", "u", "e", "y", "i", "n", "g"]
2. arr.includes(searchElement, fromIndex)
從fromIndex
開始查找searchElement
侵佃,找到了返回true
麻昼,找不到返回false
fromIndex
可省略,默認從下標0開始找趣钱。
arr.includes('u') // true
arr.includes('u', 2) // false
3. arr.join(separator)
數(shù)組合并成一個字符串涌献,每一個元素用separator
隔開。
separator
可省略首有,默認為,
arr.join() // "x,u,e,y,i,n,g"
arr.join('') // "xueying"
4. arr.slice(begin, end)
抽取數(shù)組在[begin
,end
)區(qū)間內(nèi)的元素燕垃,返回一個新數(shù)組。
arr.slice(0, 3) // ["x", "u", "e"]
5. arr.toString()
arr.toString() // "x,u,e,y,i,n,g"
6. arr.indexOf(searchElement[, fromIndex = 0])
返回searchElement
的下標井联,沒有則返回 -1
可以指定fromIndex
表示從哪個下標開始查找卜壕,默認為下標0
arr.indexOf('u') // 1
arr.indexOf('u', 2) // -1
7. arr.lastIndexOf(searchElement[, fromIndex = arr.length - 1])
找到數(shù)組中最后一個和searchElement
相等的元素的下標。
可以指定fromIndex
表示從哪個下標開始查找烙常,默認從數(shù)組最后一個元素開始轴捎。
var arr = ["x", "u", "l", "e", "y", "i", "n", "g", "l"]
arr.lastIndexOf('l') // 8
迭代方法
1. arr.forEach()
語法:
array.forEach(callback(currentValue, index, array){
//do something
}, thisArg)
對數(shù)組每一個元素執(zhí)行callback
函數(shù)鹤盒。
callback
函數(shù)接收3個參數(shù):
-
currentValue
:當前元素的值 -
index
: 當前元素的下標 -
array
:原數(shù)組
thisArg
:可選,用作callback
函數(shù)的this值侦副。
var arr = ['x', 'u', 'e', 'y', 'i', 'n', 'g']
arr.forEach((element, index, array) => console.log('arr[' + index + '] = ' + element))
/*
arr[0] = x
arr[1] = u
arr[2] = e
arr[3] = y
arr[4] = i
arr[5] = n
arr[6] = g
*/
2. arr.every(callback[, thisArg]) && arr.some(callback[, thisArg])
arr.every(callback[, thisArg])
測試數(shù)組的 所有 元素是否都通過了callback
函數(shù)的測試侦锯。
全部通過返回true
,否則返回false
thisArg
指定this
值秦驯。
// 格式和forEach方法沒區(qū)別
var arr = ['x', 'u', 'e', 'y', 'i', 'n', 'g']
console.log(arr.every((element, index, array) => element === element.toLowerCase())) // 數(shù)組中的元素是否都為小寫
// true
arr.some(callback[, thisArg])
測試數(shù)組的 某些 元素是否全部通過了callback
函數(shù)的測試尺碰。
// 語法和forEach方法沒區(qū)別
var arr = ['X', 'u', 'e', 'y', 'i', 'n', 'g'] // 第一個元素大寫
console.log(arr.some((element, index, array) => element === element.toLowerCase())) // 數(shù)組中是否有小寫的元素
// true
3. arr.filter(callback[, thisArg])
過濾器,創(chuàng)建一個新數(shù)組, 其包含通過所提供函數(shù)實現(xiàn)的測試的所有元素
語法還是跟forEach
方法沒區(qū)別译隘。
var arr = ['X', 'u', 'e', 'y', 'i', 'n', 'g'] // 第一個元素大寫
console.log(arr.filter((element, index, array) => element === element.toLowerCase()))
// [ 'u', 'e', 'y', 'i', 'n', 'g' ]
4. arr.find(callback[, thisArg]) && arr.findIndex(callback[, thisArg])
arr.find(callback[, thisArg])
語法同上亲桥。
返回數(shù)組中第一個滿足callback
函數(shù)的元素的值。否則返回 undefined
固耘。
var arr = ['X', 'u', 'e', 'y', 'i', 'n', 'g'] // 第一個元素大寫
console.log(arr.find((element, index, array) => element === element.toLowerCase()))
// "u"
arr.findIndex(callback[, thisArg])
語法同上题篷。
返回數(shù)組中第一個滿足callback
函數(shù)的元素的索引。否則返回-1厅目。
var arr = ['X', 'u', 'e', 'y', 'i', 'n', 'g'] // 第一個元素大寫
console.log(arr.findIndex((element, index, array) => element === element.toLowerCase()))
// 1
5. arr.entries()
(迭代器)返回一個新的Array Iterator對象番枚,該對象包含數(shù)組中每個索引的鍵/值對。
跟Python中迭代器一樣璧瞬,用.next()
訪問下一鍵值對户辫。
var iterator = arr.entries();
iterator.next() // {value: Array(2), done: false} done表示迭代是否已經(jīng)完成
iterator.next().value // [1, "u"]
6. arr.keys() && arr.values()
arr.keys()
返回一個新的Array迭代器,它包含數(shù)組中每個索引的鍵嗤锉。
var iterator = arr.keys();
iterator.next() // {value: 0, done: false}
iterator.next().value // 1
// 不斷next直到最后一個
console.log(iterator.next()) // {value: undefined, done: true}
arr.values()
返回一個新的 Array Iterator 對象渔欢,它包含數(shù)組每個索引的值。
PS: Chrome 未實現(xiàn)瘟忱,F(xiàn)irefox未實現(xiàn)奥额,Edge已實現(xiàn)。
Chrome 及Firefox可以用"arrSymbol.iterator"方法來代替values()方法访诱。
var arr = [1,2,3,4,5]
var i = arr[Symbol.iterator]()
i.next() // {value: 1, done: false}
i.next() // {value: 2, done: false}
7. arr.map(callback)
創(chuàng)建一個新數(shù)組垫挨,其結(jié)果是該數(shù)組中的每個元素都調(diào)用callback
函數(shù)后返回的結(jié)果。
語法:
arr.map(function callback(currentValue, index, array) {
// Return element for new_array
}[, thisArg])
例子:
arr.map((element, index, array) => element.toUpperCase()) // ["X", "U", "E", "Y", "I", "N", "G"]
8. arr.reduce(callback[, initialValue])
累加器, 數(shù)組中的每個元素(從左到右)應(yīng)用一個函數(shù)触菜,將其減少為單個值九榔。
callback
函數(shù)接收4個參數(shù):
-
accumulator
:累加器累加回調(diào)的返回值; 它是上一次調(diào)用回調(diào)時返回的累積值,或initialValue -
currentValue
:數(shù)組中正在處理的元素 -
currentIndex
:數(shù)組中正在處理的當前元素的索引涡相。 -
array
:原數(shù)組
initialValue
:用作第一個調(diào)用 callback的第一個參數(shù)的值哲泊。 如果沒有提供初始值,則將使用數(shù)組中的第一個元素催蝗。 在沒有初始值的空數(shù)組上調(diào)用 reduce 將報錯切威。
回調(diào)函數(shù)第一次執(zhí)行時,accumulator 和currentValue的取值有兩種情況:
- 調(diào)用reduce時提供initialValue丙号,accumulator取值為initialValue先朦,currentValue取數(shù)組中的第一個值缰冤。
- 沒有提供 initialValue,accumulator取數(shù)組中的第一個值喳魏,currentValue取數(shù)組中的第二個值棉浸。
// 取最大值
var arr = [1, 2, 3, 4, 5, 6]
console.log(arr.reduce((accumulator, currentValue) => Math.max(accumulator, currentValue)))
// 6
// 連接數(shù)組的元素
var arr = ['x', 'u', 'e', 'y', 'i', 'n', 'g']
console.log(arr.reduce((accumulator, currentValue) => accumulator.concat(currentValue)))
// xueying