擴(kuò)展運(yùn)算符
含義
擴(kuò)展運(yùn)算符(spread)是三個(gè)點(diǎn)(...)碍庵。它好比 rest 參數(shù)的逆運(yùn)算聘鳞,將一個(gè)數(shù)組轉(zhuǎn)為用逗號(hào)分隔的參數(shù)序列两波。
該運(yùn)算符主要用于函數(shù)調(diào)用。
擴(kuò)展運(yùn)算符的應(yīng)用
復(fù)制數(shù)組
擴(kuò)展運(yùn)算符提供了復(fù)制數(shù)組的簡(jiǎn)便寫法击儡。
合并數(shù)組
擴(kuò)展運(yùn)算符提供了數(shù)組合并的新寫法塔沃。
Array.from()
Array.from方法用于將兩類對(duì)象轉(zhuǎn)為真正的數(shù)組:類似數(shù)組的對(duì)象(array-like object)和可遍歷(iterable)的對(duì)象。
下面是一個(gè)類似數(shù)組的對(duì)象阳谍,Array.from將它轉(zhuǎn)為真正的數(shù)組蛀柴。
只要是部署了 Iterator 接口的數(shù)據(jù)結(jié)構(gòu),Array.from都能將其轉(zhuǎn)為數(shù)組矫夯。
上面代碼中鸽疾,字符串和 Set 結(jié)構(gòu)都具有 Iterator 接口,因此可以被Array.from轉(zhuǎn)為真正的數(shù)組训貌。
Array.from方法還支持類似數(shù)組的對(duì)象肮韧。所謂類似數(shù)組的對(duì)象,本質(zhì)特征只有一點(diǎn)旺订,即必須有l(wèi)ength屬性。因此超燃,任何有l(wèi)ength屬性的對(duì)象区拳,都可以通過(guò)Array.from方法轉(zhuǎn)為數(shù)組,而此時(shí)擴(kuò)展運(yùn)算符就無(wú)法轉(zhuǎn)換意乓。
Array.of()
Array.of方法用于將一組值樱调,轉(zhuǎn)換為數(shù)組约素。
這個(gè)方法的主要目的,是彌補(bǔ)數(shù)組構(gòu)造函數(shù)Array()的不足笆凌。因?yàn)閰?shù)個(gè)數(shù)的不同圣猎,會(huì)導(dǎo)致Array()的行為有差異。
Array方法沒有參數(shù)乞而、一個(gè)參數(shù)送悔、三個(gè)參數(shù)時(shí),返回結(jié)果都不一樣爪模。只有當(dāng)參數(shù)個(gè)數(shù)不少于 2 個(gè)時(shí)欠啤,Array()才會(huì)返回由參數(shù)組成的新數(shù)組。參數(shù)個(gè)數(shù)只有一個(gè)時(shí)屋灌,實(shí)際上是指定數(shù)組的長(zhǎng)度洁段。
Array.of基本上可以用來(lái)替代Array()或new Array(),并且不存在由于參數(shù)不同而導(dǎo)致的重載共郭。它的行為非常統(tǒng)一祠丝。
Array.of總是返回參數(shù)值組成的數(shù)組。如果沒有參數(shù)除嘹,就返回一個(gè)空數(shù)組写半。
數(shù)組實(shí)例的 copyWithin()
數(shù)組實(shí)例的copyWithin()方法,在當(dāng)前數(shù)組內(nèi)部憾赁,將指定位置的成員復(fù)制到其他位置(會(huì)覆蓋原有成員)污朽,然后返回當(dāng)前數(shù)組。也就是說(shuō)龙考,使用這個(gè)方法蟆肆,會(huì)修改當(dāng)前數(shù)組。
它接受三個(gè)參數(shù)晦款。
target(必需):從該位置開始替換數(shù)據(jù)炎功。如果為負(fù)值,表示倒數(shù)缓溅。
start(可選):從該位置開始讀取數(shù)據(jù)蛇损,默認(rèn)為 0。如果為負(fù)值坛怪,表示從末尾開始計(jì)算淤齐。
end(可選):到該位置前停止讀取數(shù)據(jù),默認(rèn)等于數(shù)組長(zhǎng)度袜匿。如果為負(fù)值更啄,表示從末尾開始計(jì)算。
這三個(gè)參數(shù)都應(yīng)該是數(shù)值居灯,如果不是祭务,會(huì)自動(dòng)轉(zhuǎn)為數(shù)值内狗。
上面代碼表示 將從 3 號(hào)位開始直到數(shù)組結(jié)束的成員(4 和 5),復(fù)制到從 0 號(hào)位開始的位置义锥,結(jié)果覆蓋了原來(lái)的 1 和 2柳沙。
實(shí)例:
數(shù)組實(shí)例的 find() 和 findIndex()
find()
數(shù)組實(shí)例的find方法,用于找出第一個(gè)符合條件的數(shù)組成員拌倍。它的參數(shù)是一個(gè)回調(diào)函數(shù)赂鲤,所有數(shù)組成員依次執(zhí)行該回調(diào)函數(shù),直到找出第一個(gè)返回值為true的成員贰拿,然后返回該成員蛤袒。如果沒有符合條件的成員,則返回undefined膨更。
找出數(shù)組中第一個(gè)小于 0 的成員妙真。
find方法的回調(diào)函數(shù)可以接受三個(gè)參數(shù),依次為當(dāng)前的值荚守、當(dāng)前的位置和原數(shù)組珍德。
findIndex()
數(shù)組實(shí)例的findIndex方法的用法與find方法非常類似,返回第一個(gè)符合條件的數(shù)組成員的位置矗漾,如果所有成員都不符合條件锈候,則返回-1。
這兩個(gè)方法都可以接受第二個(gè)參數(shù)敞贡,用來(lái)綁定回調(diào)函數(shù)的this對(duì)象泵琳。
find函數(shù)接收了第二個(gè)參數(shù)person對(duì)象,回調(diào)函數(shù)中的this對(duì)象指向person對(duì)象誊役。
數(shù)組實(shí)例的 fill()
fill方法使用給定值获列,填充一個(gè)數(shù)組。
fill方法用于空數(shù)組的初始化非常方便蛔垢。數(shù)組中已有的元素击孩,會(huì)被全部抹去。
fill方法還可以接受第二個(gè)和第三個(gè)參數(shù)鹏漆,用于指定填充的起始位置和結(jié)束位置巩梢。
數(shù)組實(shí)例的 entries(),keys() 和 values()
ES6 提供三個(gè)新的方法——entries()艺玲,keys()和values()——用于遍歷數(shù)組括蝠。它們都返回一個(gè)遍歷器對(duì)象,可以用for...of循環(huán)進(jìn)行遍歷饭聚,唯一的區(qū)別是keys()是對(duì)鍵名的遍歷忌警、values()是對(duì)鍵值的遍歷,entries()是對(duì)鍵值對(duì)的遍歷若治。
如果不使用for...of循環(huán)慨蓝,可以手動(dòng)調(diào)用遍歷器對(duì)象的next方法,進(jìn)行遍歷端幼。
數(shù)組實(shí)例的 includes()
Array.prototype.includes方法返回一個(gè)布爾值礼烈,表示某個(gè)數(shù)組是否包含給定的值,與字符串的includes方法類似婆跑。ES2016 引入了該方法此熬。
該方法的第二個(gè)參數(shù)表示搜索的起始位置,默認(rèn)為0滑进。如果第二個(gè)參數(shù)為負(fù)數(shù)犀忱,則表示倒數(shù)的位置,如果這時(shí)它大于數(shù)組長(zhǎng)度(比如第二個(gè)參數(shù)為-4扶关,但數(shù)組長(zhǎng)度為3)阴汇,則會(huì)重置為從0開始。
數(shù)組實(shí)例的 flat()节槐,flatMap()
flat()
數(shù)組的成員有時(shí)還是數(shù)組搀庶,Array.prototype.flat()用于將嵌套的數(shù)組“拉平”,變成一維的數(shù)組铜异。該方法返回一個(gè)新數(shù)組哥倔,對(duì)原數(shù)據(jù)沒有影響。
原數(shù)組的成員里面有一個(gè)數(shù)組揍庄,flat()方法將子數(shù)組的成員取出來(lái)咆蒿,添加在原來(lái)的位置。
flat()默認(rèn)只會(huì)“拉平”一層蚂子,如果想要“拉平”多層的嵌套數(shù)組沃测,可以將flat()方法的參數(shù)寫成一個(gè)整數(shù),表示想要拉平的層數(shù)缆镣,默認(rèn)為1.
flat()的參數(shù)為2芽突,表示要“拉平”兩層的嵌套數(shù)組。
如果不管有多少層嵌套董瞻,都要轉(zhuǎn)成一維數(shù)組寞蚌,可以用Infinity關(guān)鍵字作為參數(shù)。
flatMap()
flatMap()方法對(duì)原數(shù)組的每個(gè)成員執(zhí)行一個(gè)函數(shù)(相當(dāng)于執(zhí)行Array.prototype.map())钠糊,然后對(duì)返回值組成的數(shù)組執(zhí)行flat()方法挟秤。該方法返回一個(gè)新數(shù)組,不改變?cè)瓟?shù)組抄伍。