array用于将两类对象转换为真正的数组,
即:类似数组的对象(array-likeobject) 和可遍历(iterable)的对象 包括[Set]和[Map]
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
let arrLike = {
"0":"a",
"1":"b",
"2":"c",
length:3
}
//ES5
let arr1 = [].slice.call(arrLike) //["a", "b", "c"]
//ES6
let arr2 = Array.from(arrLike) //["a", "b", "c"]
|
实际应用,常见的类似数组的对象是DOM操作返回的NodeList集合,以及函数内部的arguments对象。
Array.from 都可以将它们转为真正的数组。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
// node list 对象
let ps = document.querySelectorAll("p");
Array.from(ps).filter(p => {
return p.textContent.length > 100;
})
//转为数组 返回filter 对象
//arguments 对象
function foo (){
var args = Array.from(arguments);
}
|
部署了Iterator的接口的数据结构,Array.from都可以将其转为数组;
1
2
3
4
5
6
7
|
Array.from('hello')
// ['h', 'e', 'l', 'l', 'o']
let namesSet = new Set(['a', 'b'])
Array.from(namesSet) // ['a', 'b']
|
兼容处理:
1
2
3
4
|
const toArray = (() =>
Array.from ? Array.from : obj => [].slice.call(obj)
)();
|
array.from 的 第二个参数:
1
2
|
Array.from([1,2,3],(x) => x*x);
|
用类似于map的方法,对数据进行处理
如果map函数里面用到了this关键字,还可以传入Array.from的第三个参数,用来绑定this。
array.from 的 第一个参数 可以 指定 第二个参数的运行次数
1
2
|
Array.from({ length: 2 }, () => 'jack')
|
其他:
Array.from()的另一个应用是,将字符串转为数组,然后返回字符串的长度。因为它能正确处理各种 Unicode 字符,可以避免 JavaScript 将大于\uFFFF的 Unicode 字符,算作两个字符的 bug。
array.from 的兼容性

代码实现分页
1
2
3
4
5
6
|
const chunk = (arr,size) =>
Array.from({length:Math.ceil(arr.length/size)},(v,i) => {
arr.slice( i*size , i*size+size)
});
|