ES6知識點整理之----數組擴展----API新增
Array.from()
用於將兩類對象轉為真正的數組:類似數組的對象(array-like object)和可遍歷(iterable)的對象(包括 ES6 新增的數據結構 Set 和 Map)。
只要是部署了 Iterator 接口的數據結構,Array.from
都能將其轉為數組。
任何有length
屬性的對象,都可以通過Array.from
方法轉為數組,而擴展運算符就無法轉換。
Array.from
還可以接受第二個參數,作用類似於數組的map
方法,用來對每個元素進行處理,將處理後的值放入返回的數組。
如果map
函數裏面用到了this
關鍵字,還可以傳入Array.from
的第三個參數,用來綁定this
Array.of()
用於將一組值,轉換為數組。
Array.of
基本上可以用來替代Array()
或new Array()
,並且不存在由於參數不同而導致的重載。它的行為非常統一。
Array.of
總是返回參數值組成的數組。如果沒有參數,就返回一個空數組。
數組實例的 copyWithin()
在當前數組內部,將指定位置的成員復制到其他位置(會覆蓋原有成員),然後返回當前數組。也就是說,使用這個方法,會修改當前數組。
它接受三個參數。
- target(必需):從該位置開始替換數據。如果為負值,表示倒數。
- start(可選):從該位置開始讀取數據,默認為 0。如果為負值,表示倒數。
- end(可選):到該位置前停止讀取數據,默認等於數組長度。如果為負值,表示倒數。
數組實例的 find()
用於找出第一個符合條件的數組成員。它的參數是一個回調函數,所有數組成員依次執行該回調函數,直到找出第一個返回值為true
的成員,然後返回該成員。如果沒有符合條件的成員,則返回undefined
。
回調函數可以接受三個參數,依次為當前的值、當前的位置和原數組。
可以接受第二個參數,用來綁定回調函數的this
對象。
此方法可以發現NaN
,彌補了數組的indexOf
方法的不足。
數組實例的findIndex()
與find
方法非常類似,返回第一個符合條件的數組成員的位置,如果所有成員都不符合條件,則返回-1
。
可以接受第二個參數,用來綁定回調函數的this
對象。
此方法可以發現NaN
indexOf
方法的不足。
數組實例的 fill()
使用給定值,填充一個數組。
fill
方法還可以接受第二個和第三個參數,用於指定填充的起始位置和結束位置。
數組實例的 entries(),keys() 和 values()
用於遍歷數組。它們都返回一個遍歷器對象(詳見《Iterator》一章),可以用for...of
循環進行遍歷,唯一的區別是keys()
是對鍵名的遍歷、values()
是對鍵值的遍歷,entries()
是對鍵值對的遍歷。
數組實例的 includes()
Array.prototype.includes
方法返回一個布爾值,表示某個數組是否包含給定的值,與字符串的includes
方法類似。
該方法的第二個參數表示搜索的起始位置,默認為0
。如果第二個參數為負數,則表示倒數的位置,如果這時它大於數組長度(比如第二個參數為-4
,但數組長度為3
),則會重置為從0
開始。
另外,Map 和 Set 數據結構有一個has
方法,需要註意與includes
區分。
- Map 結構的
has
方法,是用來查找鍵名的,比如Map.prototype.has(key)
、WeakMap.prototype.has(key)
、Reflect.has(target, propertyKey)
。 - Set 結構的
has
方法,是用來查找值的,比如Set.prototype.has(value)
、WeakSet.prototype.has(value)
。
數組實例的 flat(),flatMap()
Array.prototype.flat()
用於將嵌套的數組“拉平”,變成一維的數組。該方法返回一個新數組,對原數據沒有影響。
flat()
默認只會“拉平”一層,如果想要“拉平”多層的嵌套數組,可以將flat()
方法的參數寫成一個整數,表示想要拉平的層數,默認為1。
如果不管有多少層嵌套,都要轉成一維數組,可以用Infinity
關鍵字作為參數。
flatMap()
方法對原數組的每個成員執行一個函數(相當於執行Array.prototype.map()
),然後對返回值組成的數組執行flat()
方法。該方法返回一個新數組,不改變原數組。
flatMap()
只能展開一層數組。
flatMap()
方法的參數是一個遍歷函數,該函數可以接受三個參數,分別是當前數組成員、當前數組成員的位置(從零開始)、原數組。
flatMap()
方法還可以有第二個參數,用來綁定遍歷函數裏面的this
。
數組的空位
空位不是undefined
,一個位置的值等於undefined
,依然是有值的。空位是沒有任何值。
ES5 對空位的處理,已經很不一致了,大多數情況下會忽略空位。
forEach()
,filter()
,reduce()
,every()
和some()
都會跳過空位。map()
會跳過空位,但會保留這個值join()
和toString()
會將空位視為undefined
,而undefined
和null
會被處理成空字符串。
ES6 則是明確將空位轉為undefined
。
ES6知識點整理之----數組擴展----API新增