一、基礎(chǔ)添加和刪除方法 push(),pop(),unshift(),shift()
- push(element1, ..., elementN)
將一個(gè)或多個(gè)元素添加到數(shù)組的末尾傻丝,并返回該數(shù)組的新長(zhǎng)度
// 添加一個(gè)元素
> arr.push(1)
< 1 // 返回?cái)?shù)組長(zhǎng)度
// 添加多個(gè)元素
> arr.push(1,2,3)
<4
arr
(4) [1, 1, 2, 3] // 會(huì)改變?cè)瓟?shù)組值
- pop()
從數(shù)組中刪除最后一個(gè)元素羞迷,并返回該元素的值(當(dāng)數(shù)組為空時(shí)返回undefined矾睦。此方法更改數(shù)組的長(zhǎng)度勾栗。 - unshift(element1, ..., elementN)
將一個(gè)或多個(gè)元素添加到數(shù)組的開頭苍苞,并返回該數(shù)組的新長(zhǎng)度(該方法修改原有數(shù)組)狰晚。 - shift()
從數(shù)組中刪除第一個(gè)元素筒饰,并返回該元素的值,如果數(shù)組為空則返回undefined。此方法更改數(shù)組的長(zhǎng)度壁晒。
二瓷们、進(jìn)階splice(),可進(jìn)行刪除秒咐、添加和替換
- splice(start[, deleteCount[, item1[, item2[, ...]]]])
通過刪除或替換現(xiàn)有元素或者原地添加新的元素來修改數(shù)組,并以數(shù)組形式返回被修改的內(nèi)容谬晕。此方法會(huì)改變?cè)瓟?shù)組。返回被刪除的元素組成的一個(gè)數(shù)組携取。
參數(shù):- start: 指定修改的開始位置(從0計(jì)數(shù))攒钳。如果超出了數(shù)組的長(zhǎng)度,則從數(shù)組末尾開始添加內(nèi)容歹茶;如果是負(fù)值夕玩,則表示從數(shù)組末位開始的第幾位。
- deleteCount(可選):整數(shù)惊豺,表示要移除的數(shù)組元素的個(gè)數(shù)燎孟。
如果 deleteCount 被省略了,或者它的值大于等于array.length - start(也就是說尸昧,如果它大于或者等于start之后的所有元素的數(shù)量)揩页,那么start之后數(shù)組的所有元素都會(huì)被刪除。
如果 deleteCount 是 0 或者負(fù)數(shù)烹俗,則不移除元素爆侣。 - itemN: 要添加進(jìn)數(shù)組的元素,從start 位置開始萍程。如果不指定,則 splice() 將只刪除數(shù)組元素兔仰。
三茫负、數(shù)組排序sort([compareFunction(a, b)])
對(duì)數(shù)組的元素進(jìn)行排序,并返回?cái)?shù)組乎赴。默認(rèn)排序順序是在將元素轉(zhuǎn)換為字符串忍法,然后比較它們的Unicode位點(diǎn)進(jìn)行排序。會(huì)改變?cè)瓟?shù)組榕吼。
參數(shù):
compareFunction(可選):用來指定按某種順序進(jìn)行排列的函數(shù)饿序。
- 如果 compareFunction(a, b) 小于 0 ,那么 a 會(huì)被排列到 b 之前羹蚣;
- 如果 compareFunction(a, b) 等于 0 原探, a 和 b 的相對(duì)位置不變;
- 如果 compareFunction(a, b) 大于 0 顽素, b 會(huì)被排列到 a 之前咽弦。
// 對(duì)象可以按照某個(gè)屬性排序:
var items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 37 },
{ name: 'And', value: 45 },
{ name: 'The', value: -12 },
{ name: 'Magnetic' },
{ name: 'Zeros', value: 37 }
];
// sort by value
items.sort(function (a, b) {
return (a.value - b.value)
});
// sort by name
items.sort(function(a, b) {
var nameA = a.name.toUpperCase(); // ignore upper and lowercase
var nameB = b.name.toUpperCase(); // ignore upper and lowercase
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
// names must be equal
return 0;
});
四、其他常用方法
- concat(value1[, value2[, ...[, valueN]]])
用于合并兩個(gè)或多個(gè)數(shù)組戈抄。此方法不會(huì)更改現(xiàn)有數(shù)組离唬,而是返回一個(gè)新數(shù)組。 - join([separator])
將一個(gè)數(shù)組的所有元素連接成一個(gè)字符串并返回這個(gè)字符串划鸽。如果數(shù)組只有一個(gè)項(xiàng)目输莺,那么將返回該項(xiàng)目而不使用分隔符。
參數(shù):- separator(可選):
指定一個(gè)字符串來分隔數(shù)組的每個(gè)元素裸诽。如果缺省該值嫂用,數(shù)組元素用逗號(hào)(,)分隔。如果separator是空字符串("")丈冬,則所有元素之間都沒有任何字符嘱函。
- separator(可選):
- reverse()
將數(shù)組中元素的位置顛倒,并返回該數(shù)組埂蕊。該方法會(huì)改變?cè)瓟?shù)組往弓。 - indexOf(searchElement[, fromIndex])
返回在數(shù)組中可以找到一個(gè)給定元素的第一個(gè)索引,如果不存在蓄氧,則返回-1- searchElement:要查找的元素
- fromIndex (可選):開始查找的位置函似。如果該索引值大于或等于數(shù)組長(zhǎng)度,意味著不會(huì)在數(shù)組里查找喉童,返回-1撇寞。如果參數(shù)中提供的索引值是一個(gè)負(fù)值,則將其作為數(shù)組末尾的一個(gè)抵消,即-1表示從最后一個(gè)元素開始查找蔑担,-2表示從倒數(shù)第二個(gè)元素開始查找 牌废,以此類推。
- lastIndexOf(searchElement[, fromIndex])
返回指定元素(也即有效的 JavaScript 值或變量)在數(shù)組中的最后一個(gè)的索引啤握,如果不存在則返回 -1鸟缕。從數(shù)組的后面向前查找,從 fromIndex 處開始恨统。 - slice([begin[, end]])
返回一個(gè)新的數(shù)組對(duì)象叁扫,這一對(duì)象是一個(gè)由 begin 和 end 決定的原數(shù)組的淺拷貝(包括 begin三妈,不包括end)畜埋。原始數(shù)組不會(huì)被改變。
五畴蒲、要提供函數(shù)作為參數(shù)的方法
- filter()
返回一個(gè)新數(shù)組, 其包含通過所提供函數(shù)實(shí)現(xiàn)的測(cè)試的所有元素悠鞍。
用來測(cè)試數(shù)組的每個(gè)元素的函數(shù),返回 true 表示該元素通過測(cè)試模燥,保留該元素咖祭,false 則不保留。它接受以下三個(gè)參數(shù):- element
數(shù)組中當(dāng)前正在處理的元素蔫骂。 - index可選
正在處理的元素在數(shù)組中的索引么翰。 - array可選
調(diào)用了 filter 的數(shù)組本身。
- element
- find() findIndex()
返回?cái)?shù)組中滿足提供的測(cè)試函數(shù)的第一個(gè)元素的值辽旋。否則返回 undefined浩嫌。 - map()
創(chuàng)建一個(gè)新數(shù)組,其結(jié)果是該數(shù)組中的每個(gè)元素是調(diào)用一次提供的函數(shù)后的返回值补胚。
var numbers = [1, 4, 9];
var doubles = numbers.map(function(num) {
return num * 2;
});
// doubles數(shù)組的值為: [2, 8, 18]
// numbers數(shù)組未被修改: [1, 4, 9]
- reduce() reduceRight()
對(duì)數(shù)組中的每個(gè)元素執(zhí)行一個(gè)由您提供的reducer函數(shù)(升序執(zhí)行)码耐,將其結(jié)果匯總為單個(gè)返回值。
reducer 函數(shù)接收4個(gè)參數(shù):- Accumulator (acc) (累計(jì)器)
- Current Value (cur) (當(dāng)前值)
- Current Index (idx) (當(dāng)前索引)
- Source Array (src) (源數(shù)組)
reducer 函數(shù)的返回值分配給累計(jì)器溶其,該返回值在數(shù)組的每個(gè)迭代中被記住骚腥,并最后成為最終的單個(gè)結(jié)果值。
// 累加器
const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;
// 1 + 2 + 3 + 4
- forEach()
對(duì)數(shù)組的每個(gè)元素執(zhí)行一次給定的函數(shù)瓶逃。
除了拋出異常以外束铭,沒有辦法中止或跳出 forEach() 循環(huán)。 - every()
測(cè)試一個(gè)數(shù)組內(nèi)的所有元素是否都能通過某個(gè)指定函數(shù)的測(cè)試厢绝。它返回一個(gè)布爾值契沫。若收到一個(gè)空數(shù)組,此方法在一切情況下都會(huì)返回 true代芜。 - flatMap()
首先使用映射函數(shù)映射每個(gè)元素埠褪,然后將結(jié)果壓縮成一個(gè)新數(shù)組。
var arr1 = [1, 2, 3, 4];
arr1.map(x => [x * 2]);
// [[2], [4], [6], [8]]
arr1.flatMap(x => [x * 2]);
// [2, 4, 6, 8]
// only one level is flattened
arr1.flatMap(x => [[x * 2]]);
// [[2], [4], [6], [8]]
- some()
測(cè)試數(shù)組中是不是至少有1個(gè)元素通過了被提供的函數(shù)測(cè)試,至少一個(gè)元素通過回調(diào)函數(shù)的測(cè)試就會(huì)返回true钞速。
如果用一個(gè)空數(shù)組進(jìn)行測(cè)試贷掖,在任何情況下它返回的都是false。
六渴语、其他方法
- copyWithin(target[, start[, end]])
淺復(fù)制數(shù)組的一部分到同一數(shù)組中的另一個(gè)位置苹威,并返回它,不會(huì)改變?cè)瓟?shù)組的長(zhǎng)度驾凶。
參數(shù):- target
從0開始的索引牙甫,復(fù)制序列到該位置。如果是負(fù)數(shù)调违,target 將從末尾開始計(jì)算窟哺。
如果 target 大于等于 arr.length,將會(huì)不發(fā)生拷貝技肩。如果 target 在 start 之后且轨,復(fù)制的序列將被修改以符合 arr.length。(數(shù)組長(zhǎng)度不會(huì)改變) - start
開始復(fù)制元素的起始位置虚婿。如果是負(fù)數(shù)旋奢,start 將從末尾開始計(jì)算。
如果 start 被忽略然痊,copyWithin 將會(huì)從0開始復(fù)制至朗。 - end
開始復(fù)制元素的結(jié)束位置。copyWithin 將會(huì)拷貝到該位置剧浸,但不包括 end 這個(gè)位置的元素锹引。如果是負(fù)數(shù), end 將從末尾開始計(jì)算辛蚊。
如果 end 被忽略粤蝎,copyWithin 方法將會(huì)一直復(fù)制至數(shù)組結(jié)尾(默認(rèn)為 arr.length)。
- target
[1, 2, 3, 4, 5].copyWithin(-2, -3, -1)
// [1, 2, 3, 3, 4]
- entries()
返回一個(gè)新的Array Iterator對(duì)象袋马,該對(duì)象包含數(shù)組中每個(gè)索引的鍵/值對(duì)初澎。
const array1 = ['a', 'b', 'c'];
const iterator1 = array1.entries();
console.log(iterator1.next().value);
// expected output: Array [0, "a"]
console.log(iterator1.next().value);
// expected output: Array [1, "b"]
- fill(value[, start[, end]])
用一個(gè)固定值填充一個(gè)數(shù)組中從起始索引到終止索引內(nèi)的全部元素。不包括終止索引虑凛。
const array1 = [1, 2, 3, 4];
console.log(array1.fill(0, 2, 4));
// expected output: [1, 2, 0, 0]
- flat([depth])
按照一個(gè)可指定的深度遞歸遍歷數(shù)組碑宴,并將所有元素與遍歷到的子數(shù)組中的元素合并為一個(gè)新數(shù)組返回。默認(rèn)結(jié)構(gòu)深度為1桑谍。
flat() 方法會(huì)移除數(shù)組中的空項(xiàng)延柠。
// 扁平化嵌套數(shù)組
var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]
var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]
- includes(valueToFind[, fromIndex])
用來判斷一個(gè)數(shù)組是否包含一個(gè)指定的值,根據(jù)情況锣披,如果包含則返回 true贞间,否則返回false贿条。(區(qū)分大小寫) - keys()
返回一個(gè)包含數(shù)組中每個(gè)索引鍵的Array Iterator對(duì)象。
const array1 = ['a', 'b', 'c'];
const iterator = array1.keys();
for (const key of iterator) {
console.log(key);
}
// expected output: 0
// expected output: 1
// expected output: 2
- toLocaleString()
返回一個(gè)字符串表示數(shù)組中的元素增热。數(shù)組中的元素將使用各自的 toLocaleString 方法轉(zhuǎn)成字符串整以,這些字符串將使用一個(gè)特定語言環(huán)境的字符串(例如一個(gè)逗號(hào) ",")隔開。 - toString()
返回一個(gè)字符串峻仇,表示指定的數(shù)組及其元素公黑。
[1,2,[3,4,5,[6,7]]].toString()
"1,2,3,4,5,6,7"
- values()
返回一個(gè)新的 Array Iterator 對(duì)象,該對(duì)象包含數(shù)組每個(gè)索引的值.
const array1 = ['a', 'b', 'c'];
const iterator = array1.values();
for (const value of iterator) {
console.log(value);
}
// expected output: "a"
// expected output: "b"
// expected output: "c"