今天講一下數(shù)組的拓展方法;
拓展運(yùn)算符(spread)
可以很直觀的看到他的作用 是將一個數(shù)組轉(zhuǎn)為用逗號分隔的參數(shù)序列贾陷。
該運(yùn)算符用在函數(shù)的調(diào)用
例如
注意只有在函數(shù)調(diào)用時缘眶,才可以放在圓括號中,否則會報(bào)錯昵宇。
擴(kuò)展運(yùn)算符的出現(xiàn)代替了函數(shù)apply方法磅崭;
因?yàn)樵贓S5中儿子,push方法的參數(shù)不能是數(shù)組瓦哎,所以只能通過apply方法變通使用push方法,有了spead方法柔逼,就可以直接將數(shù)組傳入push方法蒋譬。
它有那些應(yīng)用呢?
先看看這個:
數(shù)組是復(fù)合的數(shù)據(jù)類型愉适,直接復(fù)制的話犯助,只是復(fù)制了指向底層數(shù)據(jù)結(jié)構(gòu)的指針,而不是克隆一個全選的數(shù)組维咸。
上述代碼中剂买,a2并不是a1 的克隆,而是同一份數(shù)據(jù)的另一個指針癌蓖。修改a2瞬哼,會直接導(dǎo)致a1的變化。
ES5中只能用變通的方法來復(fù)制數(shù)組租副。
a1會返回原數(shù)組的克隆坐慰,在修改a2就不會對a1產(chǎn)生影響了。
兩種方法都是克掠蒙结胀;
擴(kuò)展運(yùn)算符提供了數(shù)組合并的新方法赞咙。
但是這樣兩種方法都是淺拷貝。
擴(kuò)展運(yùn)算符也可以和解構(gòu)賦值一起使用糟港,用于生成數(shù)組攀操;
但是如果將擴(kuò)展運(yùn)算符用于解構(gòu)賦值,只能放在參數(shù)的最后一位着逐,否則會報(bào)錯崔赌。
擴(kuò)展運(yùn)算符還可以將字符串轉(zhuǎn)為真正的數(shù)組。
Array.from();
此方法用于將類似數(shù)組的對象和可遍歷的對象轉(zhuǎn)為真正的數(shù)組耸别,從而使用數(shù)組的方法健芭;
然鵝在實(shí)際應(yīng)用中,常見的類似數(shù)組的對象是DOM操作返回的Nodelist集合秀姐。以及內(nèi)部函數(shù)arguments對象慈迈。用此方法就可以將他們轉(zhuǎn)為真正的數(shù)組。
只要是部署了Iterator接口的數(shù)據(jù)結(jié)構(gòu)省有,Array.from都可以將其轉(zhuǎn)為數(shù)組痒留。
Array.from()還支持類似數(shù)組的對象,本質(zhì)特征只有一點(diǎn)蠢沿。必須擁有l(wèi)ength屬性伸头。
而且此方法還可以接收第二個參數(shù),類似于數(shù)組map的方法舷蟀,用來對每個元素進(jìn)行處理恤磷,將處理后的值放入返回的數(shù)組。
Array.of()
此方法用于將一組值野宜,轉(zhuǎn)為數(shù)組扫步。
上面描述中,可以看懂匈子。一個參數(shù)河胎,兩個參數(shù),及三個參數(shù)每次返回的值不同虎敦。參數(shù)只有一個正整數(shù)時游岳,實(shí)際上指定數(shù)組的長度。參數(shù)個數(shù)不少于2個時其徙,才返回由參數(shù)組成的新數(shù)組胚迫。
Array.of(),總是返回參數(shù)值組成的數(shù)組擂橘。如果沒有參數(shù)蕾管,就會返回一個空數(shù)組芯咧。
find()疆虚;
此方法用于找出第一個復(fù)合條件的數(shù)組成員,參數(shù)是一個回調(diào)函數(shù)恼五,所有的成員依次執(zhí)行該回調(diào)函數(shù),直到找到第一個返回值為true的成員哭懈。然后返回該成員灾馒,沒有找到。返回undefined遣总。
上面代碼中睬罗,find方法的回調(diào)函數(shù)可以接受三個參數(shù),依次為當(dāng)前的值旭斥,當(dāng)前的位置容达,以及原數(shù)組。
findIndex():此方法和find()方法非常類似垂券,返回的是第一個條件的數(shù)組成員位置花盐。如果都不符合返回-1;
fill()菇爪;
此方法使用給定值算芯,填充一個數(shù)組。
此方法用于填充空數(shù)組非常方便凳宙,但是數(shù)組中已有的元素熙揍,會被全部抹去,
此方法還可以接受第二個和第三個參數(shù)氏涩。用于指定填充的其實(shí)位置和結(jié)束位置届囚。
flat();
此方法用于將嵌套的數(shù)組‘拉平’削葱,變成一維數(shù)組奖亚,該方法返回一個數(shù)組淳梦,對原數(shù)據(jù)沒有影響析砸。
但是。此方法默認(rèn)拉平一層爆袍,可以進(jìn)行傳參首繁,將參數(shù)寫成一個整數(shù),表示想要拉平的層數(shù)陨囊,默認(rèn)為1.
flatMap();
此方法的作用是弦疮,對原數(shù)組的每個成員執(zhí)行一次函數(shù),然后在對返回值進(jìn)行flat()方法蜘醋。
返回值:返回一個新數(shù)組胁塞,
不會改變原數(shù)組。
但是默認(rèn)只能展開一層,
此方法的參數(shù)是一個遍歷函數(shù)啸罢,該函數(shù)可以接受三個參數(shù)编检,分別是當(dāng)前數(shù)組成員,當(dāng)前數(shù)組成員的位置(從零開始)扰才,原數(shù)組允懂;
at();
ES6之前衩匣,數(shù)組不支持負(fù)索引蕾总,先要引用數(shù)組的最后一個成員,只能使用arr[arr.length-1];
ES6中增加了新方法琅捏,可以支持負(fù)數(shù)索引生百。
如果參數(shù)位置超出了數(shù)組范圍,at()返回undefined柄延;