javascript - 用于 ES6 生成器的 hasNext()

标签 javascript iterator ecmascript-6 generator

我将如何为生成器实现 hasNext() 方法。我尝试了很多选项,比如将生成器添加为返回语句并从闭包中产生。获取第一个值打印它然后使用 while 等,但它们都没有实际工作。

我知道我可以使用 for of 或 while like How to loop the JavaScript iterator that comes from generator?但仍然想知道我是否可以添加 hasNext()。

function *range(start,end){

    while(start < end){
        yield start; 
        start++
    }
}

let iterator = range(1,10); 

// so I can do something like this. 
while(iterator.hasNext()){
   console.log(iterator.next().value); 
}

最佳答案

循环迭代器的简单非for...of方法是

for (let iterator = range(1, 10), r; !(r = iterator.next()).done; ) {
    console.log(r.value);
}

如果你真的想使用hasNext,你也可以这样做,但是有点奇怪:

const iterator = range(1, 10);
iterator.hasNext = function hasNext() {
    const r = this.next();
    this.current = r.value;
    return !r.done;
};
while (iterator.hasNext()) {
    console.log(iterator.current);
}

关于javascript - 用于 ES6 生成器的 hasNext(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39296151/

相关文章:

error-handling - 父类(super class)构造函数调用应该在构造函数主体中

javascript - 具有 CSS 转换和转换结束事件的竞争条件 - 找不到解决方案

c++ - C+ 自定义迭代器?

javascript - 如何动态更改样式组件的样式?

Python - 选择字典中的另一个元素

rust - 从 rust 向量中间开始的单次循环迭代

javascript - 展开 JS 对象并转换数组

javascript - Koa 中异步函数的奇怪问题

javascript - 如何将 if 语句从警报更改为文本

Javascript深度继承和 super 构造函数