使用函数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); }); 

只是想一想