Array.form 是什么

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 的兼容性

MDN截图

代码实现分页

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)
});