【发布时间】:2018-12-23 14:26:05
【问题描述】:
我正在学习迭代器/生成器,想知道是否有办法让迭代器自行重置?就像你打电话给最后一个.next() 之后有没有办法让它重新启动?
function nextName() {
const current = names.next().value
const output = document.querySelector("output")
if (current) {
output.innerText = current.name
}
else {
// code to reset it! currently I'm just displaying text
output.innerText = 'Nothing left'
}
}
function nameIterator(names) {
let nextIndex = 0;
return {
next: function() {
return nextIndex < names.length ?
{ value: names[nextIndex++], done: false } :
{ done: true }
}
}
}
这里有一个更清楚的代码笔:https://codepen.io/sammiepls/pen/romyKL?editors=1010
因此,当您单击按钮时,它会调用我的迭代器,每次单击时,它将在 my names 数组中一一显示名称。如何在最后一次点击时将其重置,使其恢复为名字?
所以显示会是这样的:
鲍勃
彼得
莎莉
Bob // 再次获取 Bob
在 codepen 中,我还使用生成器编写了迭代器,无论如何,它是否也能够在通过数组产生后重置回第一个?
【问题讨论】:
-
你想骑车吗?
-
我人生中第一次看到“function*”...但是如果你想循环,这应该可以codepen.io/anon/pen/QzvpRw?editors=1010。刚刚修改了 var 的 const 和一些手动代码来重置 UI。
标签: javascript iterator