使用函数for循环与非数组迭代器
假设我们有这个生成器函数(生成器fn返回一个迭代器):
function* foo(){ yield 1; yield 2; yield 3; } for (let i of foo()) { console.log(i); }
我们可以使用for..of
循环遍历迭代器。
我的问题是 :是否有一种方法来创build一个function的循环遍历迭代器像一个数组?
[1,2,3].forEach(function(i){ // we have our own block scope for each item in the iterable });
是我们最好的select这种技术?
for (let i of foo()) { (function(i){ })(i); }
似乎必须有一个更简单的方法
[...foo()].forEach
每个应该是最接近的。
一个更大的问题是为什么JavaScript不提供发生器/ Iterables类似数组的function。
您可以使用Array.from
的第二个参数,它是一个类似于地图的callback函数:
Array.from(foo(), value => console.log(value));
function* foo(){ yield 1; yield 2; yield 3; } Array.from(foo(), value => console.log(value));
下面是TypeScript如何处理这个问题:
之前
const iterator = [1,2,3]; for (let o of iterator) { console.log(o); }
后
var iterator = [1, 2, 3]; for (var _i = 0, iterator_1 = iterator; _i < iterator_1.length; _i++) { var o = iterator_1[_i]; console.log(o); }
下面是TypeScript如何处理这个问题:
之前
const iterator = [1,2,3]; Array.from(iterator).forEach(function(o){ console.log(o); });
后
var iterator = [1, 2, 3]; Array.from(iterator).forEach(function (o) { console.log(o); });
只是想一想