會(huì)改變自身的方法:##
array.copyWithin(target, start [, end = this.length])【有兼容性問(wèn)題】
用于在數(shù)組內(nèi)的替換操作,即替換元素和被替換元素都是數(shù)組內(nèi)的元素
參數(shù)皆為整數(shù),允許start,end為負(fù)數(shù)(倒數(shù)第n個(gè))
array.fill(value [,statrt = 0[, end = this.length]])
將數(shù)組中指定區(qū)間的所有元素的值,都替換成value
start,end允許為負(fù)值,同上
array.pop()
刪除一個(gè)數(shù)組中的最后一個(gè)元素,并且返回這個(gè)元素
array.push(element1, ...elementN)
添加一個(gè)或多個(gè)元素到數(shù)組的末尾,并返回?cái)?shù)組新的長(zhǎng)度
array.reverse()
前后顛倒數(shù)組中元素的位置,第一個(gè)元素會(huì)成為最后一個(gè)
array.shift()
刪除數(shù)組的第一個(gè)元素,并返回這個(gè)元素
array.unshift(element1, ...elementN)
在數(shù)組的開頭插入一個(gè)或多個(gè)元素,并返回?cái)?shù)組的新長(zhǎng)度
array.sort([function(a, b)])
對(duì)數(shù)組的元素做原地的排序,并返回這個(gè)數(shù)組。sort可能不穩(wěn)定,默認(rèn)按照字符串的unicode碼位點(diǎn)排序
記a和b是兩個(gè)將要被比較的元素:
- 如果函數(shù)function(a, b)返回值小于0, 則a會(huì)排在b之前
- 如何函數(shù)返回值等于0, 則a和b的相對(duì)位置不變(并不被保證)
- 如果函數(shù)返回值大于0,則a會(huì)排在b之后
- 比較函數(shù)輸出結(jié)果必須穩(wěn)定,否則排序的結(jié)果將是不確定的
array.splice(start, deleteCount[, item1[, item2...])
在任意的位置給數(shù)組添加或刪除任意個(gè)元素(拼接),返回被刪除的元素組成的數(shù)組,沒(méi)有則返回空數(shù)組
start: 開始操作的索引
deleteCount:要移除的數(shù)組元素的個(gè)數(shù)
itemN:要添加進(jìn)數(shù)組的元素,如果不指定,則splice只刪除數(shù)組元素
不會(huì)改變自身的方法##
array.concat(value1, value2.....)
將傳入的數(shù)組或非數(shù)組值與原數(shù)組合并,組成一個(gè)新的數(shù)組并返回
注意:concat方法在拷貝原數(shù)組的過(guò)程中,
- 對(duì)象引用(非對(duì)象直接量):concat方法會(huì)復(fù)制對(duì)象引用放到組合的新數(shù)組里,原數(shù)組和新數(shù)組中的對(duì)象引用都指向同一個(gè)實(shí)際的對(duì)象,所以,當(dāng)實(shí)際的對(duì)象被修改時(shí),兩個(gè)數(shù)組也同時(shí)被修改
- 字符串和數(shù)字(是原始值,而不是包裝原始值的string和number對(duì)象):concat方法會(huì)復(fù)制字符串和數(shù)字的值放到新數(shù)組里
一個(gè)栗子:
var arr1 = [1, 2, {a: 'test'}]
var arr2 = ['a', 'b', 'c']
var output = arr1.concat(arr2)
console.log(output) // output[2].a == 'test'
setTimeout(function(){
arr1[2].a = 'has changed'
console.warn(output) //output[2].a == 'has changed'
}, 5000)
另一個(gè)栗子:
var arr1 = [1, 2, 3]
var arr2 = ['a', 'b', 'c']
var output = arr1.concat(arr2)
console.log(output)
setTimeout(function(){
arr1[2] = 99
console.warn(output) //output值并不會(huì)改變
}, 5000)
將非數(shù)組值合并到數(shù)組里:
var alpha = ['a', 'b', 'c']
var output = alpha.concat(1, [2, 3]) //['a', 'b', 'c', 1, 2, 3]
array.includes(searchElement, [, fromIndex])[實(shí)驗(yàn)性質(zhì),es7,可能會(huì)改變或刪除]
用來(lái)判斷當(dāng)前數(shù)組是否包含某指定的值,如果是,則返回true,否則false
array.join([separator = ','])
將數(shù)組中的所有元素連接成一個(gè)字符串(默認(rèn)用逗號(hào)作為分隔符,如果separator是一個(gè)空字符串,那么數(shù)組中的所有元素將被直接連接)
如果元素是undefined或者null,則會(huì)轉(zhuǎn)化成空字符串
array.slice([begin = 0 [, end = this.length - 1]])
把數(shù)組中一部分的淺復(fù)制(shallow copy)存入一個(gè)新的數(shù)組對(duì)象中,并返回這個(gè)新的數(shù)組
不修改原數(shù)組,只會(huì)返回一個(gè)包含了原數(shù)組中提取的部分元素的一個(gè)新數(shù)組
具體拷貝規(guī)則同concat函數(shù)
array.toString()
返回一個(gè)字符串,該字符串由數(shù)組中的每個(gè)元素的toString()返回值經(jīng)調(diào)用join()方法連接(由逗號(hào)隔開)組成。
一個(gè)例子:
var arr = ['abc', 2, {a: 'test'}]
console.log(arr.toString()) //'abc,2,[object Object]'
array.toLocaleString()
返回一個(gè)字符串表示數(shù)組中的元素。數(shù)組中的元素將使用各自的toLocaleString方法轉(zhuǎn)化成字符串,這些字符串將使用一個(gè)特定語(yǔ)言環(huán)境的字符串(例如逗號(hào))隔開
array.indexOf(searchElement[, fromIndex = 0])
返回指定元素能在數(shù)組中找到的第一個(gè)索引值,否則返回-1
fromIndex可以為負(fù),表示從倒數(shù)第n個(gè)開始(此時(shí)仍然從前向后查詢數(shù)組)
使用“嚴(yán)格相等”(===)進(jìn)行匹配
一個(gè)例子:
var obj = {a: 'test'}
var arr = ['a', 'b', {a: 'test'}]
console.log(arr.indexOf(obj)) //-1
var arr2 = [1, 'b', {a: 'test'}]
console.log(arr2.indexOf('1')) //-1
array.lastIndexOf(searchElement[, fromIndex = arr.length - 1])
返回指定元素在數(shù)組中的最后一個(gè)的索引,如果不存在則返回-1, 從數(shù)組的后面向前查找
同上
遍歷方法##
array.forEach((v, i, a) => {})
讓數(shù)組的每一項(xiàng)都執(zhí)行一次給定的函數(shù)
v表示當(dāng)前項(xiàng)的值,i表示當(dāng)前索引,a表示數(shù)組本身
forEach遍歷的范圍在第一次調(diào)用 callback前就會(huì)確定。調(diào)用forEach后添加到數(shù)組中的項(xiàng)不會(huì)被 callback訪問(wèn)到。如果已經(jīng)存在的值被改變,則傳遞給 callback的值是 forEach遍歷到他們那一刻的值。已刪除的項(xiàng)不會(huì)被遍歷到。
array.entries()
返回一個(gè)Array Iterator對(duì)象,該對(duì)象包含數(shù)組中每一個(gè)索引的鍵值對(duì)
一個(gè)例子:
var arr = ["a", "b", "c"];
var eArr = arr.entries();
console.log(eArr.next().value); // [0, "a"]
console.log(eArr.next().value); // [1, "b"]
console.log(eArr.next().value); // [2, "c"]
array.every(callback(v, i, a){})
callback只會(huì)為那些已經(jīng)被賦值的索引調(diào)用,不會(huì)為那些被刪除或從來(lái)沒(méi)有被賦值的索引調(diào)用
和forEach函數(shù)類似
注意:array.every()返回一個(gè)布爾值,即對(duì)每個(gè)元素的callback函數(shù)結(jié)果作邏輯“&”操作
array.some()
使用方法同上,
注意:對(duì)每個(gè)元素的callback函數(shù)結(jié)果作邏輯“||”操作
array.filter((v, i, a) => {})
使用指定的函數(shù)測(cè)試所有元素,并創(chuàng)建一個(gè)包含所有測(cè)試通過(guò)的元素的新數(shù)組
callback函數(shù)返回一個(gè)布爾值,true即通過(guò)測(cè)試
callback只會(huì)在已經(jīng)賦值的索引上被調(diào)用,對(duì)于那些已經(jīng)被刪除或者從未被賦值的索引不會(huì)被調(diào)用
不會(huì)改變?cè)瓟?shù)組
array.find((v, i, a) =>{})【有兼容性問(wèn)題目前】
返回?cái)?shù)組中滿足測(cè)試條件的第一個(gè)元素,如果沒(méi)有滿足條件的元素,則返回undefined
array.keys()
返回一個(gè)數(shù)組索引的迭代器(類似于array.entries()方法)
array.map((v, i, a) => {})
返回一個(gè)由原數(shù)組中的每個(gè)元素調(diào)用一個(gè)指定方法后的返回值組成的新數(shù)組
map 不修改調(diào)用它的原數(shù)組本身(當(dāng)然可以在 callback 執(zhí)行時(shí)改變?cè)瓟?shù)組)
array.reduce(callback[, initialValue])
該方法接收一個(gè)函數(shù)作為累加器(accumulator),數(shù)組中的每個(gè)值(從左到右)開始合并,最終為一個(gè)值
callback參數(shù):
previousValue:上一次調(diào)用回調(diào)返回的值,或者是提供的初始值(initialValue)
currentValue: 數(shù)組中當(dāng)前被處理的元素
index: index
array: 調(diào)用的數(shù)組
如果 initialValue 在調(diào)用 reduce 時(shí)被提供,那么第一個(gè) previousValue 等于 initialValue ,并且currentValue 等于數(shù)組中的第一個(gè)值;如果initialValue 未被提供,那么previousValue 等于數(shù)組中的第一個(gè)值,currentValue等于數(shù)組中的第二個(gè)值。
一個(gè)例子
[0, 1, 2, 3, 4, 5].reduce((p, v, i , a) => {
return p + v
})
//15
數(shù)組扁平化:
var flattened = [[0, 1], [2, 3], [4, 5]].reduce((a, b) => {
return a.concat(b)
})
//flattened is [0, 1, 2, 3, 4, 5]
array.reduceRight()
使用同上,與reduce()的執(zhí)行方向相反