1. 程式人生 > >數組對象新增方法Array.from()、Array.of()

數組對象新增方法Array.from()、Array.of()

console 字符 構造 bject 運算 tor doc list ora

1. Array.from()

Array.from方法用於將兩類對象轉為真正的數組:類數組的對象( array-like object )和可遍歷( iterable )的對象(包括 ES6 新增的數據結構 Set 和Map )。

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‘] // NodeList 對象 let ps = document.querySelectorAll(‘p‘); Array.from(ps).forEach(function (p) {   console.log(p); }); // arguments 對象 function foo() { var args = Array.from(arguments); // ... }
//字符串轉換為字符數組str.split(‘‘) Array.from(
‘hello‘) // [‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘]
let namesSet = new Set([‘a‘, ‘b‘]) Array.from(namesSet) // [‘a‘, ‘b‘] Array.from({ length: 3 }); // [ undefined, undefined, undefined ]

對於還沒有部署該方法的瀏覽器,可以用Array.prototype.slice方法替代:

const toArray = (() =>
  Array.from ? Array.from : obj => [].slice.call(obj)
)();

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

Array.from(arrayLike, x => x * x);  
//  等同於  
Array.from(arrayLike).map(x => x * x);  
Array.from([1, 2, 3], (x) => x * x)  
// [1, 4, 9]  
//Array.from回調函數
var arr1 = Array.from([1,2,3], function(item){
    return item*item;
});
var arr2 = Array.from([1,2,3]).map(function(item){
    return item*item;
});
var arr3 = Array.from([1,2,3], (item) => item*item);

console.log(arr1); //[ 1, 4, 9 ]
console.log(arr2); //[ 1, 4, 9 ]
console.log(arr3); //[ 1, 4, 9 ]

值得提醒的是,擴展運算符(...)也可以將某些數據結構轉為數組。

// arguments 對象  
function foo() {  
  var args = [...arguments];  
}  
// NodeList 對象  
[...document.querySelectorAll(‘div‘)]  

2. Array.of()

Array.of方法用於將一組值,轉換為數組。Array.of總是返回參數值組成的數組。如果沒有參數,就返回一個空數組。

Array.of基本上可以用來替代Array()或new Array(),並且不存在由於參數不同而導致的重載。它的行為非常統一。

這個方法的主要目的,是彌補數組構造函數Array()的不足。因為參數個數的不同,會導致Array()的行為有差異

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

Array.of方法可以用下面的代碼模擬實現:

function ArrayOf(){
  return [].slice.call(arguments);
}

參考: w3cschool—數組的拓展

數組對象新增方法Array.from()、Array.of()