1. 程式人生 > 其它 >ES6之陣列的Array.from()方法

ES6之陣列的Array.from()方法

Array.from()方法就是建構函式本身的方法 將一個類陣列物件或者可遍歷物件轉換成一個真正的陣列。

  那麼什麼是類陣列物件呢?所謂類陣列物件,最基本的要求就是具有length屬性的物件。

1、將類陣列物件轉換為真正陣列:

1 let arrayLike = {
2     0: 'tom', 
3     1: '65',
4     2: '男',
5     3: ['jane','john','Mary'],
6     'length': 4
7 }
8 let arr = Array.from(arrayLike)
9 console.log(arr) // ['tom','65','男',['jane','john','Mary']]

  那麼,如果將上面程式碼中length屬性去掉呢?實踐證明,答案會是一個長度為0的空陣列。

  這裡將程式碼再改一下,就是具有length屬性,但是物件的屬性名不再是數字型別的,而是其他字串型的,程式碼如下:

1 let arrayLike = {
2     'name': 'tom', 
3     'age': '65',
4     'sex': '男',
5     'friends': ['jane','john','Mary'],
6     length: 4
7 }
8 let arr = Array.from(arrayLike)
9 console.log(arr)  //
[ undefined, undefined, undefined, undefined ]

  會發現結果是長度為4,元素均為undefined的陣列

  由此可見,要將一個類陣列物件轉換為一個真正的陣列,必須具備以下條件:

  1、該類陣列物件必須具有length屬性,用於指定陣列的長度。如果沒有length屬性,那麼轉換後的陣列是一個空陣列。

  2、該類陣列物件的屬性名必須為數值型或字串型的數字

  ps: 該類陣列物件的屬性名可以加引號,也可以不加引號

2、將Set結構的資料轉換為真正的陣列: 

1 let arr = [12,45,97,9797,564,134,45642]
2 let set = new Set(arr) 3 console.log(Array.from(set)) // [ 12, 45, 97, 9797, 564, 134, 45642 ]

  Array.from還可以接受第二個引數,作用類似於陣列的map方法,用來對每個元素進行處理,將處理後的值放入返回的陣列。如下:

1 let arr = [12,45,97,9797,564,134,45642]
2 let set = new Set(arr)
3 console.log(Array.from(set, item => item + 1)) // [ 13, 46, 98, 9798, 565, 135, 45643 ]

3、將字串轉換為陣列:

1 let  str = 'hello world!';
2 console.log(Array.from(str)) // ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d", "!"]

4、Array.from引數是一個真正的陣列:

console.log(Array.from([12,45,47,56,213,4654,154]))

  像這種情況,Array.from會返回一個一模一樣的新陣列

5、將獲取的元素偽陣列轉成真陣列:

1   var nodeList = document.querySelectorAll("li")
2   console.log(nodeList)   // NodeList(6)[li, li, li, li, li, li]
3   var Arr = Array.from(nodeList)
4   console.log(Arr)   //(6)[li, li, li, li, li, li]