1. 程式人生 > 其它 >7.ES6-Array.from()和Array.of()

7.ES6-Array.from()和Array.of()

1.Array.from方法用於將兩類物件轉為真正的陣列:類似陣列的物件(array-like object)和可遍歷(iterable)的物件(包括 ES6 新增的資料結構 Set 和 Map)。

下面是一個類似陣列的物件,Array.from將它轉為真正的陣列。

let arrayLike = {
    '0': 'a',
    '1': 'b',
    '2': 'c',
    length: 3
};

// ES5的寫法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']

// ES6的寫法
let arr2 = Array.from(arrayLike); //
['a', 'b', 'c']

只要是部署了 Iterator 介面的資料結構,Array.from都能將其轉為陣列。

Array.from('hello')
// ['h', 'e', 'l', 'l', 'o']

let namesSet = new Set(['a', 'b'])
Array.from(namesSet) // ['a', 'b']

上面程式碼中,字串和 Set 結構都具有 Iterator 介面,因此可以被Array.from轉為真正的陣列。

2.Array.of()

Array.of()方法用於將一組值,轉換為陣列。

Array.of(3, 11, 8) // [3,11,8]
Array.of(3) // [3] Array.of(3).length // 1

這個方法的主要目的,是彌補陣列建構函式Array()的不足。因為引數個數的不同,會導致Array()的行為有差異。

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

上面程式碼中,Array()方法沒有引數、一個引數、三個引數時,返回的結果都不一樣。只有當引數個數不少於 2 個時,Array()才會返回由引數組成的新陣列。引數只有一個正整數時,實際上是指定陣列的長度。

Array.of()基本上可以用來替代Array()new Array()

,並且不存在由於引數不同而導致的過載。它的行為非常統一。

Array.of() // []
Array.of(undefined) // [undefined]
Array.of(1) // [1]
Array.of(1, 2) // [1, 2]

Array.of()總是返回引數值組成的陣列。如果沒有引數,就返回一個空陣列。