将ES6 Iterable转换为数组

假设你有一个类似于数组的Javascript ES6 Iterable,你事先知道它的长度是有限的,那么把它转换成一个Javascript数组的最好方法是什么?

这样做的原因是许多js库(如下划线和lodash)仅支持数组,所以如果您希望在Iterable上使用它们的任何函数,则必须先将其转换为Array。

在python中,你可以使用list()函数。 ES6中有相同的东西吗?

您可以使用Array.from或spread运算符 。

例:

 let s = new Set(); s.add(1); s.add(2); s.add(3); s.add(4); let a = Array.from(s); // = [ 1, 2, 3, 4 ] let b = [...s]; // = [ 1, 2, 3, 4 ] 

您可以使用ES6中添加的Array.from方法,但只支持数组和迭代对象,如地图和集合(也在ES6中)。 对于常规对象,可以使用Underscore的toArray方法或lodash的toArray方法,因为这两个库实际上对对象有很好的支持,而不仅仅是数组。 如果你已经使用了下划线或lodash,那么幸运的是,他们可以为你处理这个问题,同时为你的对象添加各种function概念,比如map和reduce。

你也可以这样做:

 let arr = []; for (let elem of gen(...)){ arr.push(elem); } 

或者使用ES5 +生成器函数( Fiddle在当前的Firefox中工作)的“困难的方式”:

 var squares = function*(n){ for (var i=0; i<n; i++){ yield i*i; } } var arr = []; var gen = squares(10); var g; while(true){ g = gen.next(); if (g.done){ break; } arr.push(g.value); } 

这两种方法当然不推荐使用,只是一个概念validation。

Interesting Posts