es6中數(shù)組新增的一些方法?

1腊尚、Array.from()-用于將兩類對(duì)象轉(zhuǎn)為真正的數(shù)組:類似數(shù)組的對(duì)象(array-like object)和可遍歷(iterable)的對(duì)象(包括 ES6 新增的數(shù)據(jù)結(jié)構(gòu) Set 和 Map)喜每。

let arrayLike = {
????'0': 'a',
????'1': 'b',
????'2': 'c',
????length: 3
};
// ES5的寫(xiě)法
var arr1 = [].slice.call(arrayLike);? ?// ['a', 'b', 'c']
// ES6的寫(xiě)法
let arr2 = Array.from(arrayLike);? ?// ['a', 'b', 'c']

實(shí)際應(yīng)用中间护,常見(jiàn)的類似數(shù)組的對(duì)象是 DOM 操作返回的 NodeList 集合企蹭,以及函數(shù)內(nèi)部的arguments對(duì)象铐拐。Array.from都可以將它們轉(zhuǎn)為真正的數(shù)組。

// NodeList對(duì)象
let ps = document.querySelectorAll('p');
Array.from(ps).filter(p => { return p.textContent.length > 100;});
?// arguments對(duì)象
function foo() { var args = Array.from(arguments); // ...}


2练对、Array.of()-用于將一組值,轉(zhuǎn)換為數(shù)組吹害。

這個(gè)方法的主要目的螟凭,是彌補(bǔ)數(shù)組構(gòu)造函數(shù)Array()的不足。因?yàn)閰?shù)個(gè)數(shù)的不同它呀,會(huì)導(dǎo)致Array()的行為有差異螺男。

Array() // []
Array(3) // [, , ,]
Array(3, 11, 8) // [3, 11, 8]?

上面代碼中棒厘,Array方法沒(méi)有參數(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)一拷淘。?


3各墨、find(fn, thisObj) 和 finfIndex(fn, thisObj)
? ? 3.1、find()-用于找出第一個(gè)符合條件的數(shù)組成員启涯。它的參數(shù)是一個(gè)回調(diào)函數(shù)贬堵,所有數(shù)組成員依次執(zhí)行該回調(diào)函數(shù),直到找出第一個(gè)返回值為true的成員结洼,然后返回該成員黎做。如果沒(méi)有符合條件的成員,則返回undefined补君。
? ? 3.2引几、findIndex()-返回第一個(gè)符合條件的數(shù)組成員的位置,如果所有成員都不符合條件挽铁,則返回-1伟桅。
注意:這兩個(gè)方法都可以接受第二個(gè)參數(shù),用來(lái)綁定回調(diào)函數(shù)的this對(duì)象叽掘。


4楣铁、fill(value, start, end)-用value值從start位置填充到end,不包含end位置的值更扁。
注意盖腕,如果填充的類型為對(duì)象,那么被賦值的是同一個(gè)內(nèi)存地址的對(duì)象浓镜,而不是深拷貝對(duì)象溃列。


5、entries()膛薛,keys() 和 values()


6听隐、includes()
Array.prototype.includes方法返回一個(gè)布爾值,表示某個(gè)數(shù)組是否包含給定的值哄啄,與字符串的includes方法類似雅任。ES2016 引入了該方法风范。

[1,2,3].includes(2) // true
[1,2,3].includes(4) // false
[1,2,NaN].includes(NaN) // true

該方法的第二個(gè)參數(shù)表示搜索的起始位置,默認(rèn)為0沪么。如果第二個(gè)參數(shù)為負(fù)數(shù)硼婿,則表示倒數(shù)的位置,如果這時(shí)它大于數(shù)組長(zhǎng)度(比如第二個(gè)參數(shù)為-4禽车,但數(shù)組長(zhǎng)度為3)寇漫,則會(huì)重置為從0開(kāi)始。

[1,2,3].includes(3,3); // false
[1,2,3].includes(3,-1); // true

沒(méi)有該方法之前哭当,我們通常使用數(shù)組的indexOf方法猪腕,檢查是否包含某個(gè)值。

if (arr.indexOf(el) !== -1) { // ...}?

indexOf方法有兩個(gè)缺點(diǎn)钦勘,一是不夠語(yǔ)義化陋葡,它的含義是找到參數(shù)值的第一個(gè)出現(xiàn)位置,所以要去比較是否不等于-1彻采,表達(dá)起來(lái)不夠直觀腐缤。二是,它內(nèi)部使用嚴(yán)格相等運(yùn)算符(===)進(jìn)行判斷肛响,這會(huì)導(dǎo)致對(duì)NaN的誤判岭粤。

[NaN].indexOf(NaN)// -1?

includes使用的是不一樣的判斷算法,就沒(méi)有這個(gè)問(wèn)題特笋。

[NaN].includes(NaN)// true?

下面代碼用來(lái)檢查當(dāng)前環(huán)境是否支持該方法剃浇,如果不支持,部署一個(gè)簡(jiǎn)易的替代版本猎物。

const contains = (() =>
?????Array.prototype.includes ?
????(arr, value) => arr.includes(value) :
????(arr, value) => arr.some(el => el === value)
)();
contains(['foo', 'bar'], 'baz'); // => false?

另外虎囚,Map 和 Set 數(shù)據(jù)結(jié)構(gòu)有一個(gè)has方法,需要注意與includes區(qū)分蔫磨。

- Map 結(jié)構(gòu)的has方法淘讥,是用來(lái)查找鍵名的,比如Map.prototype.has(key)堤如、WeakMap.prototype.has(key)蒲列、Reflect.has(target, propertyKey)。
- Set 結(jié)構(gòu)的has方法搀罢,是用來(lái)查找值的蝗岖,比如Set.prototype.has(value)、WeakSet.prototype.has(value)榔至。?


7剪侮、flat()-如下圖所示

只會(huì)“拉平”一層,如果想要“拉平”多層的嵌套數(shù)組,可以將flat()方法的參數(shù)寫(xiě)成一個(gè)整數(shù)瓣俯,表示想要拉平的層數(shù),默認(rèn)為1兵怯。

[1, 2, [3, [4, 5]]].flat()// [1, 2, 3, [4, 5]]
[1, 2, [3, [4, 5]]].flat(2)// [1, 2, 3, 4, 5]


文章內(nèi)容摘至阮一峰老師的es6

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末彩匕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子媒区,更是在濱河造成了極大的恐慌驼仪,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件袜漩,死亡現(xiàn)場(chǎng)離奇詭異绪爸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)宙攻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門奠货,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人座掘,你說(shuō)我怎么就攤上這事递惋。” “怎么了溢陪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵萍虽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我形真,道長(zhǎng)杉编,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任咆霜,我火速辦了婚禮邓馒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘裕便。我一直安慰自己绒净,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布偿衰。 她就那樣靜靜地躺著挂疆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪下翎。 梳的紋絲不亂的頭發(fā)上缤言,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音视事,去河邊找鬼胆萧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的跌穗。 我是一名探鬼主播订晌,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蚌吸!你這毒婦竟也來(lái)了锈拨?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤羹唠,失蹤者是張志新(化名)和其女友劉穎奕枢,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體佩微,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缝彬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哺眯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谷浅。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖族购,靈堂內(nèi)的尸體忽然破棺而出壳贪,到底是詐尸還是另有隱情,我是刑警寧澤寝杖,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布违施,位于F島的核電站,受9級(jí)特大地震影響瑟幕,放射性物質(zhì)發(fā)生泄漏磕蒲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一只盹、第九天 我趴在偏房一處隱蔽的房頂上張望辣往。 院中可真熱鬧,春花似錦殖卑、人聲如沸站削。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至热某,卻和暖如春菩鲜,著一層夾襖步出監(jiān)牢的瞬間园细,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工接校, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猛频,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鹿寻,于是被迫代替她去往敵國(guó)和親睦柴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354