JavaScript Array.from() (從類陣列建立陣列)
Array.from() 是一個靜態方法,用來從類陣列 (array-like) 或可迭代物件 (iterable) 建立一個新的陣列。
語法:
Array.from(arrayLike[, mapFn[, thisArg]])
- arrayLike 是要轉換成陣列的類陣列或可迭代物件
- mapFn 是可選的 map 函數,會對每個元素執行
- thisArg 代表 mapFn 裡面的 this 是指向哪一個物件
從字串建立陣列
Array.from('hello');
// ['h', 'e', 'l', 'l', 'o']
從 NodeList 建立陣列
// querySelectorAll 回傳的是 NodeList,不是真正的陣列
var divs = document.querySelectorAll('div');
// 轉成陣列後就可以使用陣列方法
var divArray = Array.from(divs);
divArray.forEach(function(div) {
console.log(div.textContent);
});
從 arguments 建立陣列
function sum() {
// arguments 是類陣列物件
var args = Array.from(arguments);
return args.reduce(function(a, b) {
return a + b;
}, 0);
}
sum(1, 2, 3, 4); // 10
從 Set 建立陣列
var set = new Set([1, 2, 3, 2, 1]);
Array.from(set); // [1, 2, 3]
從 Map 建立陣列
var map = new Map([['a', 1], ['b', 2]]);
Array.from(map); // [['a', 1], ['b', 2]]
使用 mapFn 參數
// 產生 1 到 5 的陣列
Array.from({ length: 5 }, function(v, i) {
return i + 1;
});
// [1, 2, 3, 4, 5]
// 產生數字的平方
Array.from([1, 2, 3], function(x) {
return x * x;
});
// [1, 4, 9]
// 使用箭頭函數 (ES6)
Array.from({ length: 5 }, (_, i) => i + 1);
建立指定長度的陣列
// 建立長度為 5 的陣列,全部填入 0
Array.from({ length: 5 }, () => 0);
// [0, 0, 0, 0, 0]
// 建立連續數字陣列
Array.from({ length: 10 }, (_, i) => i);
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Array.from() 是 ES6 新增的方法。對於可迭代物件,也可以使用展開運算子
[...iterable] 來達到類似效果。