如何循环来自生成器的JavaScript迭代器

How to loop the JavaScript iterator that comes from generator?

本文关键字:迭代器 JavaScript 何循环 循环      更新时间:2023-09-26

让我们假设我们有以下生成器:

var gen = function* () {
  for (var i = 0; i < 10; i++ ) {
    yield i;
  }
};

遍历迭代器最有效的方法是什么?目前,我手动检查done属性是否设置为true

var item
  , iterator = gen();
while (item = iterator.next(), !item.done) {
  console.log( item.value );
}

迭代任何可迭代对象(支持@@iterator的对象)的最佳方法是使用for..of,就像这个

'use strict';
function * gen() {
    for (var i = 0; i < 10; i++) {
        yield i;
    }
}
for (let value of gen()) {
    console.log(value);
}

或者,如果你想要一个数组,那么你可以使用Array.from,就像这个

console.log(Array.from(gen());
// [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

问题中while循环的独立单行替代方案是for循环。对于针对纯副作用或损耗进行迭代的特殊情况,我们避免了绑定下一个项值的问题,然后不在for-of解决方案中使用它:

for (let n = iterator.next(); !n.done; n = iterator.next()) {}