我将如何为生成器实现 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/