[菜鳥工程師] Array.from()方法介紹

郭佩禎
小郭 เจน
Published in
3 min readDec 2, 2019

在es6裡,Array新增了一個Array.from()的方法,要如何使用它呢?

Array.from(ArrayLike或是 Iterable對象)

Array.from()簡單來說是一個把ArrayLike對象(類陣列)或是 Iterable對象轉換成Array陣列對象的方法。

ArrayLike對象

ArrayLike意思就是和array很像的陣列,但不是陣列。是不是很饒口呢@@?最主要差別在於,ArrayLike對象不能使用pushmap等方法,但具有length的屬性可以進行更迭的操作。

例如:取得dom 元素的nodeList 或是 HTMLCollection類型,都是一種ArrayLike對象。假設我們今天要抓到#card裡面所有的card,把他打印出來會回傳一個HTMLCollection,但是如果將#card用Array.from()方法包起來,回傳的就會是一般的陣列,這就是Array.from()最主要的用處。

document.querySelector('#cards').children
// HTMLCollection(5) [div.card, div.card, div.card, div.card, div.card]
Array.from(document.querySelector('#cards').children)
// [div.card, div.card, div.card, div.card, div.card]

Iterable對象

利用array.keys()拿出這個陣列的迭代器,就是Iterable對象,如果用於產生一組新的陣列,可以寫Array(5).keys()產生陣列長度=5的Iterator 作為Array.from()傳入的東西,這樣就會回傳一個陣列,再利用這個陣列去做map、push等等的操作。

Array.from(Array(5).keys())   
// Array(52) 產生52個空值,利用keys取道他的iterator 回傳作為陣列

Array.from() 箭頭函式作為 map 函式來操作元素

除了上述將傳入的對象轉成陣列使用,Array.from()可以利用箭頭函數產生一組陣列,第一個參數傳入一個object,內容包含長度length,第二個參數利用箭頭函數表示執行map函數來產生陣列,如果想要產生一組更迭器的數值,使用方式如下,來達到產生新陣列的目的。

Array.from({ length: 5}, (num, i) => i)
// [0,1,2,3,4]

--

--

郭佩禎
小郭 เจน

要在隨波逐流中飄到一個自己的島嶼。這裡記錄人生發生了甚麼。