ES6中的Array.from()
最近在看ES6,看到Array.from()
还挺有意思的,在网上查了很多资料,做一下总结。它的作用就是把一个类数组转化成一个真正的数组,输入一个类数组的对象,返回一个真正的数组,挺符合函数式的思想,但是遗憾的是它可以接受第二个可选参数,没有curry化,不过可以只传一个参数。
平时我们见的比较多的类数组就是函数的arguments
,通过JS选择DOM选择出来的DOM NodeList
,字符串也可以算为类数组。
拿arguments
举例,以前我们想要把它转化成真正的数组,一般这样转化
let arr = Array.prototype.slice.call(arguments)
或者这样
let arr = [].slice.call(arguments)
现在有了Array.from()
,变得很方便
let arr = Array.from(arguments)
还有一个用法,就是生成一个特定数目的数组,类数组最重要的特性是length这个属性,所以可以这样生成一个特定数目的数组
//生成一个五个元素的数组
const arrLike = {length: 5}
const arr = Array.from(arrLike)
console.log(arr)
// [ undefined, undefined, undefined, undefined, undefined ]
这样有什么用呢,如果有一个需求是要生成一个这样顺序排列的数组[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
,我们会用for循环
let arr = []
for (let i = 0; i < 10; i++) {
arr.push(i + 1)
}
console.log(arr)
我们还可以用函数式编程的思路实现它
const R = require("ramda")
const f = (item, index) => index + 1
const arr = R.addIndex(R.map)(f, Array.from({length: 10}))
console.log(arr)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。