會改變自身的方法
array.pop()
刪除一個(gè)數(shù)組中的最后一個(gè)元素,并且返回這個(gè)元素array.push(element1, ...elementN)
添加一個(gè)或多個(gè)元素到數(shù)組的末尾,并返回?cái)?shù)組新的長度array.reverse()
前后顛倒數(shù)組中元素的位置,第一個(gè)元素會成為最后一個(gè)array.shift()
刪除數(shù)組的第一個(gè)元素,并返回這個(gè)元素array.unshift(element1, ...elementN)
在數(shù)組的開頭插入一個(gè)或多個(gè)元素,并返回?cái)?shù)組的新長度array.sort([function(a, b)])
對數(shù)組的元素做原地的排序,并返回這個(gè)數(shù)組,按升序排列的。sort默認(rèn)把元素轉(zhuǎn)成字符串后按照字符串的unicode碼位點(diǎn)排序,所以很多時(shí)候排序結(jié)果不是我們所期望的。但是我們可以自己傳一個(gè)函數(shù)作為參數(shù),手動(dòng)排序
如果指明了`compareFunction`,那么數(shù)組會按照調(diào)用該函數(shù)的返回值進(jìn)行排序。比較函數(shù)`compareFunction`接收兩個(gè)參數(shù)`a`和`b`,`a`和`b`是兩個(gè)將要被比較的元素:
* **`compareFunction(a,b)`返回的值小于`0`**:那么`a`就小于`b`,也就是說`a`排在了`b`的前面
* **`compareFunction(a,b)`返回的值大于`0`**: 那么`a`就大于`b`,也就是說`a`排在了`b`的后面
* **`compareFunction(a,b)`返回的值等于`0`**:那么`a`就等于`b`,也就是說`a`和`b`的位置保持不變
不僅可以升序降序還可以隨機(jī)排序
var randomArray = [9,0,23,8,3,5];
function randomSort(a, b){
return Math.random() - 0.5;
}
console.log(randomArray.sort(randomSort));
array.splice(start, deleteCount[, item1[, item2...])
在任意的位置給數(shù)組添加或刪除任意個(gè)元素(拼接),返回被刪除的元素組成的數(shù)組,沒有則返回空數(shù)組array.copyWithin(target, start = 0, end = this.length)
在當(dāng)前數(shù)組內(nèi)部,將指定位置的成員復(fù)制到其他位置(會覆蓋原有成員),然后返回當(dāng)前數(shù)組。也就是說,使用這個(gè)方法,會修改當(dāng)前數(shù)組。
target(必需):從該位置開始替換數(shù)據(jù)。如果為負(fù)值,表示倒數(shù)。
start(可選):從該位置開始讀取數(shù)據(jù),默認(rèn)為 0。如果為負(fù)值,表示倒數(shù)。
end(可選):到該位置前停止讀取數(shù)據(jù),默認(rèn)等于數(shù)組長度。如果為負(fù)值,表示倒數(shù)。
[1, 2, 3, 4, 5].copyWithin(0, 3)
// [4, 5, 3, 4, 5]
上面代碼表示將從 3 號位直到數(shù)組結(jié)束的成員(4 和 5),復(fù)制到從 0 號位開始的位置,結(jié)果覆蓋了原來的 1 和 2。
// 將3號位復(fù)制到0號位
[1, 2, 3, 4, 5].copyWithin(0, 3, 4)
// [4, 2, 3, 4, 5]
// -2相當(dāng)于3號位,-1相當(dāng)于4號位
[1, 2, 3, 4, 5].copyWithin(0, -2, -1)
// [4, 2, 3, 4, 5]
不會改變自身的方法
array.concat(value1, value2.....)
將傳入的數(shù)組或非數(shù)組值與原數(shù)組合并,組成一個(gè)新的數(shù)組并返回。假設(shè)value1中如果有對象的話,新返回的數(shù)組中的對象和value1中是同一個(gè)引用。array.join([separator = ','])
將數(shù)組中的所有元素連接成一個(gè)字符串(默認(rèn)用逗號作為分隔符,如果separator是一個(gè)空字符串,那么數(shù)組中的所有元素將被直接連接)
如果元素是undefined或者null,則會轉(zhuǎn)化成空字符串array.slice([begin = 0 [, end = this.length - 1]])
把數(shù)組中一部分的淺復(fù)制(shallow copy)存入一個(gè)新的數(shù)組對象中,并返回這個(gè)新的數(shù)組
不修改原數(shù)組,只會返回一個(gè)包含了原數(shù)組中提取的部分元素的一個(gè)新數(shù)組array.toString()
返回一個(gè)字符串,該字符串由數(shù)組中的每個(gè)元素的toString()返回值經(jīng)調(diào)用join()方法連接(由逗號隔開)組成。
var arr = ['abc', 2, {a: 'test'}]
console.log(arr.toString()) //'abc,2,[object Object]'
-
array.indexOf(searchElement[, fromIndex = 0])
返回指定元素能在數(shù)組中找到的第一個(gè)索引值,否則返回-1
fromIndex可以為負(fù),表示從倒數(shù)第n個(gè)開始(此時(shí)仍然從前向后查詢數(shù)組)
使用“嚴(yán)格相等”(===)進(jìn)行匹配
var obj = {a: 'test'}
var arr = ['a', 'b', {a: 'test'}]
console.log(arr.indexOf(obj)) //-1 因?yàn)槭菄?yán)格相等
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ù),ES5中操作數(shù)組的一種方法
v表示當(dāng)前項(xiàng)的值,i表示當(dāng)前索引,a表示數(shù)組本身
forEach遍歷的范圍在第一次調(diào)用 callback前就會確定。調(diào)用forEach后添加到數(shù)組中的項(xiàng)不會被 callback訪問到。如果已經(jīng)存在的值被改變,則傳遞給 callback的值是 forEach遍歷到他們那一刻的值。已刪除的項(xiàng)不會被遍歷到。array entries(),keys() 和 values()
ES6 提供三個(gè)新的方法——entries(),keys()和values()——用于遍歷數(shù)組。它們都返回一個(gè)遍歷器對象,可以用for...of循環(huán)進(jìn)行遍歷,唯一的區(qū)別是keys()是對鍵名的遍歷、values()是對鍵值的遍歷,entries()是對鍵值對的遍歷。
for (let index of ['a', 'b'].keys()) {
console.log(index);
}
// 0
// 1
for (let elem of ['a', 'b'].values()) {
console.log(elem);
}
// 'a'
// 'b'
for (let [index, elem] of ['a', 'b'].entries()) {
console.log(index, elem);
}
// 0 "a"
// 1 "b"
如果不使用for...of循環(huán),可以手動(dòng)調(diào)用遍歷器對象的next方法,進(jìn)行遍歷。
let letter = ['a', 'b', 'c'];
let entries = letter.entries();
console.log(entries.next().value); // [0, 'a']
console.log(entries.next().value); // [1, 'b']
console.log(entries.next().value); // [2, 'c']
array.every(callback(v, i, a){})
callback只會為那些已經(jīng)被賦值的索引調(diào)用,不會為那些被刪除或從來沒有被賦值的索引調(diào)用
和forEach函數(shù)類似
注意:array.every()返回一個(gè)布爾值,即對每個(gè)元素的callback函數(shù)結(jié)果作邏輯“&”操作array.some()
使用方法同上,
注意:對每個(gè)元素的callback函數(shù)結(jié)果作邏輯“||”操作array.filter((v, i, a) => {})
使用指定的函數(shù)測試所有元素,并創(chuàng)建一個(gè)包含所有測試通過的元素的新數(shù)組
callback函數(shù)返回一個(gè)布爾值,true即通過測array.find((v, i, a) =>{})
返回?cái)?shù)組中滿足測試條件的第一個(gè)元素,如果沒有滿足條件的元素,則返回undefined
[1, 5, 10, 15].find(function(value, index, arr) {
return value > 9;
}) // 10
-
array.findIndex((v, i, a) =>{})
數(shù)組實(shí)例的findIndex方法的用法與find方法非常類似,返回第一個(gè)符合條件的數(shù)組成員的位置,如果所有成員都不符合條件,則返回-1。
[1, 5, 10, 15].findIndex(function(value, index, arr) {
return value > 9;
}) // 2
這兩個(gè)方法都可以接受第二個(gè)參數(shù),用來綁定回調(diào)函數(shù)的this對象。
function f(v){
return v > this.age;
}
let person = {name: 'John', age: 20};
[10, 12, 26, 15].find(f, person); // 26
indexOf方法無法識別數(shù)組的NaN成員,但是findIndex方法可以借助Object.is方法做到。
[NaN].indexOf(NaN)
// -1
[NaN].findIndex(y => Object.is(NaN, y))
array.map((v, i, a) => {})
返回一個(gè)由原數(shù)組中的每個(gè)元素調(diào)用一個(gè)指定方法后的返回值組成的新數(shù)組
map 不修改調(diào)用它的原數(shù)組本身(當(dāng)然可以在 callback 執(zhí)行時(shí)改變原數(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è)值。
[0, 1, 2, 3, 4, 5].reduce((p, v, i , a) => {
return p + v
})
// 數(shù)組扁平化
var flattened = [[0, 1], [2, 3], [4, 5]].reduce((a, b) => {
return a.concat(b)
})
-
array.includes(v,[ fromIndex = 0] )
返回一個(gè)布爾值,表示某個(gè)數(shù)組是否包含給定的值,與字符串的includes方法類似。該方法的第二個(gè)參數(shù)表示搜索的起始位置,默認(rèn)為0。如果第二個(gè)參數(shù)為負(fù)數(shù),則表示倒數(shù)的位置,如果這時(shí)它大于數(shù)組長度(比如第二個(gè)參數(shù)為-4,但數(shù)組長度為3),則會重置為從0開始。
[1, 2, NaN].includes(NaN) // true
[1, 2, 3].includes(3, 3); // false
[1, 2, 3].includes(3, -1); // true
非數(shù)組轉(zhuǎn)換為數(shù)組
Array.from方法用于將兩類對象轉(zhuǎn)為真正的數(shù)組
Array.of方法用于將一組值,轉(zhuǎn)換為數(shù)組。
Array.of(3, 11, 8) // [3,11,8]
Array.of(3) // [3]
Array.of(3).length // 1
slice,substring,substr的區(qū)別
首先,他們都接收兩個(gè)參數(shù),slice和substring接收的是起始位置和結(jié)束位置(不包括結(jié)束位置),而substr接收的則是起始位置和所要返回的字符串長度。直接看下面例子:
var test = 'hello world';
alert(test.slice(4,7)); //o w
alert(test.substring(4,7)); //o w
alert(test.substr(4,7)); //o world
上面的操作都不會改變test字符串,而是返回新值。
substring是以兩個(gè)參數(shù)中較小一個(gè)作為起始位置,較大的參數(shù)作為結(jié)束位置。
接著,當(dāng)接收的參數(shù)是負(fù)數(shù)時(shí),slice會將它字符串的長度與對應(yīng)的負(fù)數(shù)相加,結(jié)果作為參數(shù);substr則僅僅是將第一個(gè)參數(shù)與字符串長度相加后的結(jié)果作為第一個(gè)參數(shù);substring則干脆將負(fù)參數(shù)都直接轉(zhuǎn)換為0。
slice,substr和substring的區(qū)別
split分割字符串為數(shù)組。但是如果分割的參數(shù)字符串中沒有,返回值還是個(gè)數(shù)組,只有一個(gè)值為字符串本身。