JS數(shù)組常用方法
JS數(shù)組常用方法:
1.數(shù)組的復(fù)制和填充
批量復(fù)制方法 copyWithin(),以及填充數(shù)組方法fill()。
這兩個(gè)方法的函數(shù)簽名類(lèi)似,都需要指定既有數(shù)組實(shí)例上的一個(gè)范圍,包含開(kāi)始索引,不包含結(jié)束索引。
使用這個(gè)方法不會(huì)改變數(shù)組的大小。
1.1.fill()方法
使用fill()方法可以向一個(gè)已有的數(shù)組中插入全部或部分相同的值。
開(kāi)始索引用于指定開(kāi)始填充的位置,它是可選的。
如果不提供結(jié)束索引,則一直填充到數(shù)組末尾。
負(fù)值索引從數(shù)組末尾開(kāi)始計(jì)算。
const array =[0,0,0,0,0]; //填充5 array.fill(5); console.log(array); //從索引為3的數(shù)開(kāi)始填充3 array.fill(3,3); console.log(array); //在索引為1到3的數(shù)中填充8 array.fill(8,1,3); console.log(array);
1.2.copyWithin()
copyWithin()會(huì)按照指定范圍淺復(fù)制數(shù)組中的部分內(nèi)容,然后將它們插入到指定索引開(kāi)始的位置
const array =[0,1,0,2,0,3,0,4,0,5]; //復(fù)制索引0開(kāi)始的內(nèi)容,插入到索引8開(kāi)始時(shí)的位置 array.copyWithin(8); console.log(array); //復(fù)制索引5開(kāi)始的內(nèi)容, 插入到索引0開(kāi)始的位置 array.copyWithin(0,5); console.log(array); //復(fù)制索引0到索引2的內(nèi)容,插入到索引6開(kāi)始的位置 array.copyWithin(6,0,2); console.log(array);
2.轉(zhuǎn)換方法
前面提到過(guò).所有對(duì)象都有toLocaleString()、toString()和valueof()方法。
其中,valueof()返回的還是數(shù)組本身。
tostring()返回由數(shù)組中每個(gè)值的等效字符串拼接而成的一個(gè)逗號(hào)分隔的三字符串。
let colors = ["red", "blue", "green"]; console.log(colors.toString()); console.log(colors.valueOf()); //使用join()方法可以使用不同的分隔符 console.log(colors.join("||"));
3.數(shù)組常用方法
方法splice()用于創(chuàng)建一個(gè)包含原有數(shù)組中一個(gè)或多個(gè)元素的新數(shù)組。
splice()方法可以接收一個(gè)或兩個(gè)參數(shù):返回元素的開(kāi)始索引和結(jié)束索引。
如果只有一個(gè)參數(shù),則splice()會(huì)返回該索引到數(shù)組末尾的所有元素。
如果有兩個(gè)參數(shù),則splice()返回從開(kāi)始索引到結(jié)束索引對(duì)應(yīng)的所有元素,其中不包含結(jié)束索引對(duì)應(yīng)的元素。
記住,這個(gè)操作不影響原始數(shù)組。
或許最強(qiáng)大的數(shù)組方法就屬splice()了,使用它的方式可以有很多種。
splice()的主要目的是在數(shù)組中間插入元素,但有3種不同的方式使用這個(gè)方法。
(確實(shí)強(qiáng)大)
(1) 刪除。需要給splice()傳2個(gè)參數(shù):要?jiǎng)h除的第一個(gè)元素的位置和要?jiǎng)h除的元素?cái)?shù)量。
可以從數(shù)組中刪除任意多個(gè)元素,比如splice(0,2)會(huì)刪除前兩個(gè)元素。
(2) 插入。需要給splice()傳3個(gè)參數(shù):開(kāi)始位置、0(要?jiǎng)h除的元素?cái)?shù)量)和要插入的元素,可以在數(shù)組中指定的位置插入元素。
第三個(gè)參數(shù)之后還可以傳第四個(gè)、第五個(gè)參數(shù),乃至任意多個(gè)要插入的元素。
比如,splice(2,0,"red","green")會(huì)從數(shù)組位置2開(kāi)始插入字符串"red"和"green"。
(3) 替換。splice()在刪除元素的同時(shí)可以在指定位置插入新元素,同樣要傳入3個(gè)參數(shù):開(kāi)始位置、要?jiǎng)h除元素的數(shù)量和要插人的任意多個(gè)元素。
要插入的元素?cái)?shù)量不一定跟刪除的元素?cái)?shù)量一致。比如,s(2,1,"red","green")會(huì)在位置2刪除一個(gè)元素,然后從該位置開(kāi)始向數(shù)組中插入""和"green"。
splice()方法始終返回這樣一個(gè)數(shù)組,它包含從數(shù)組中被刪除的元素(如果沒(méi)有刪除元素,則返回空數(shù)組)
(一個(gè)方法,滿(mǎn)足三個(gè)愿望)
試一試:
let colors = ["red", "blue", "green"]; colors.splice(0,1); console.log(colors); colors.splice(1,0,"black","orange"); console.log(colors); colors.splice(1,1,"pink"); console.log(colors);
4.搜索和"判斷"方法
4.1.搜索方法
ECMAScript提供了3個(gè)嚴(yán)格相等的搜索方法:indexof()、lastIndexof()和includes()。
其中,前兩個(gè)方法在所有版本中都可用,而第三個(gè)方法是ECMAScript7新增的。
這些方法都接收兩個(gè)參數(shù):要查找的元素和一個(gè)可選的起始搜索位置。
indexof()和includes()方法從數(shù)組前頭(第一項(xiàng))開(kāi)始向后搜索,而lastIndexof()從數(shù)組末尾(最后一項(xiàng))開(kāi)始向前搜索。
indexof()和 lastIndexof()都返回要查找的元素在數(shù)組中的位置,如果沒(méi)找到則返回-1。
includes()返回布爾值,表示是否至少找到一個(gè)與指定元素匹配的項(xiàng)。
書(shū)里面居然沒(méi)寫(xiě)includes()方法的參數(shù),補(bǔ)充一下:
const array =[1,2,3,4,5,4,3,2,1]; console.log(array.indexOf(1)); console.log(array.lastIndexOf(1)); console.log(array.includes(1)); console.log(array.indexOf(1,5)); console.log(array.lastIndexOf(1,5)); //從索引5開(kāi)始找"1",找到就返回true console.log(array.includes(1,5));
4.2.斷言函數(shù)
ECMAScript 也允許按照定義的斷言函數(shù)搜索數(shù)組,每個(gè)索引都會(huì)調(diào)用這個(gè)函數(shù)。
斷言函數(shù)的返回值決定了相應(yīng)索引的元素是否被認(rèn)為匹配。
斷言函數(shù)接收3個(gè)參數(shù):元素、索引和數(shù)組本身。
其中元素是數(shù)組中當(dāng)前搜索的元素,索引是當(dāng)前元素的索引,而數(shù)組就是正在搜索的數(shù)組。
斷言函數(shù)返回真值,表示是否匹配。
find()和findIndex()方法使用了斷言函數(shù)。
這兩個(gè)方法都從數(shù)組的最小索引開(kāi)始。
find()返回第一個(gè)匹配的元素,findIndex()返回第一個(gè)匹配元素的索引。
這兩個(gè)方法也都接收第二個(gè)可選的參數(shù),用于指定斷言函數(shù)內(nèi)部this的值。
let people = [{ name: "panghu", age: "80" }, { name: "dream", age: "50" }, { name: "xiaofu", age: "30" }, ]; console.log(people.find((element, index, array) => element.age > 49)); console.log(people.findIndex((element, index, array) => element.age > 49));
(感覺(jué)這個(gè)歸類(lèi)進(jìn)迭代方法也沒(méi)什么問(wèn)題)
5.迭代方法
ECMAScript為數(shù)組定義了5個(gè)迭代方法。
每個(gè)方法接收兩個(gè)參數(shù):以每一項(xiàng)為參數(shù)運(yùn)行的函數(shù).個(gè)參數(shù):數(shù)組元素、元素索引和數(shù)組本身。
因具體方法而異,這個(gè)函數(shù)的執(zhí)行結(jié)果可能會(huì)也可能不會(huì)影響方法的返回值。
數(shù)組的5個(gè)迭代方法如下。
(1) every():對(duì)數(shù)組每一項(xiàng)都運(yùn)行傳入的函數(shù),如果對(duì)每一項(xiàng)函數(shù)都返回true,則這個(gè)方法返回true。
(2) some():對(duì)數(shù)組每一項(xiàng)都運(yùn)行傳入的函數(shù),如果有一項(xiàng)函數(shù)返回true,則這個(gè)方法返回true。這些方法都不改變調(diào)用它們的數(shù)組。
(3) map():對(duì)數(shù)組每一項(xiàng)都運(yùn)行傳入的函數(shù),返回由每次函數(shù)調(diào)用的結(jié)果構(gòu)成的數(shù)組。
(4) filter():對(duì)數(shù)組每一項(xiàng)都運(yùn)行傳入的函數(shù),函數(shù)返回true的項(xiàng)會(huì)組成數(shù)組之后返回。
(5) forEach():對(duì)數(shù)組每一項(xiàng)都運(yùn)行傳入的函數(shù),沒(méi)有返回值。
可以說(shuō),every(),some(),和map()組成一類(lèi),他們像斷言函數(shù)
filter()和forEach()為一類(lèi)他們則更像"迭代"操作
重要的例子:
const array = [1, 2, 3, 4, 5, 4, 3, 2, 1]; //every()全部符合要求,才返回true console.log(array.every((element, index, array) => element > 2)); //some()只要有一個(gè)符合要求,就返回true console.log(array.some((element, index, array) => element > 2)); //map()對(duì)所有項(xiàng)調(diào)用方法,將每一次調(diào)用的結(jié)果構(gòu)成數(shù)組返回 console.log(array.map((element, index, array) => element > 2)); //filter()0把符合要求的篩選出來(lái) console.log(array.filter((element, index, array) => element > 2)); //forEach()把符合要求的項(xiàng)進(jìn)行某些操作 console.log(array.forEach((element, index, array) => element > 2));
6.歸并方法
這個(gè)沒(méi)啥好說(shuō)的,本質(zhì)上也是迭代方法的一種,多了幾個(gè)參數(shù)而已
ECMAScript為數(shù)組提供了兩個(gè)歸并方法:reduce()和 reduceRight()。
這兩個(gè)方法都會(huì)迭代數(shù)組的所有項(xiàng),并在此基礎(chǔ)上構(gòu)建一個(gè)最終返回值。
reduce()方法從數(shù)組第一項(xiàng)開(kāi)始遍歷到最后一項(xiàng)。
而 reduceRight()從最后一項(xiàng)開(kāi)始遍歷至第一項(xiàng)。
(一個(gè)從左往右,一個(gè)從右往左)
這兩個(gè)方法都接收兩個(gè)參數(shù):對(duì)每一項(xiàng)都會(huì)運(yùn)行的歸并函數(shù),以及可選的以之為歸并起點(diǎn)的初始值:傳給reduce()和reduceRight()的函數(shù)接收4個(gè)參數(shù):上一個(gè)歸并值、當(dāng)前項(xiàng)、當(dāng)前項(xiàng)的索引和數(shù)組本身。
這個(gè)函數(shù)返回的任何值都會(huì)作為下一次調(diào)用同一個(gè)函數(shù)的第一個(gè)參數(shù)。
如果沒(méi)有給這兩個(gè)方法傳入可選的第二個(gè)參數(shù)(作為歸并起點(diǎn)值),則第一次迭代將從數(shù)組的第二項(xiàng)開(kāi)始,因此傳給歸并函數(shù)的第一個(gè)參數(shù)是數(shù)組的第一項(xiàng),第二個(gè)參數(shù)是數(shù)組的第二項(xiàng)。
可以使用reduce()函數(shù)執(zhí)行累加數(shù)組中所有數(shù)值的操作.
const array_1 = [9, 90, 900, 9000, 1]; let sum = array_1.reduce((prev, cur, index, array) => prev + cur, ); console.log(sum);
掃描二維碼推送至手機(jī)訪問(wèn)。
版權(quán)聲明:本文由星星博客發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。