sam*_*pls 4 javascript iterator
我正在学习迭代器/生成器,并且想知道是否有办法使迭代器自行重置?就像在你调用最后一个之后.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 }
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个更清晰的代码笔: https://codepen.io/sammiepls/pen/romyKL?editors =1010
因此,当您单击该按钮时,它会调用我的迭代器,每次您单击时,它将一一显示我的名称数组中的名称。如何使其在最后一次单击时重置,以便返回到名字?
所以显示会是这样的:
鲍勃
彼得
莎莉
Bob // 再次获取 Bob
在codepen中,我还使用生成器编写了迭代器,无论如何,在通过数组产生之后,是否也能够重置回第一个迭代器?
一般的答案是你不能在 JS 中重置可迭代对象。据我所知,这是设计使然,尽管我不了解得出该结论的决策过程。
然而,在您的特定情况下,您不一定需要重置迭代器,而是希望循环遍历数组。在这种情况下,您可以使用模运算符,如下所示:
function nameIterator(names) {
let nextIndex = 0;
return {
next: function() {
nextIndex = (nextIndex + 1) % names.length;
return { value: names[nextIndex], done: false };
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2989 次 |
| 最近记录: |