Javascript 有没有更好的方法来确定迭代器是否已达到其最后一个值?
我可以这样做:Javascript 有没有更好的方法来确定迭代器是否已达到其最后一个值?,javascript,iterator,Javascript,Iterator,我可以这样做: let iter = mySet.values(); var val = iter.next(); var next = iter.next(); while(val.value){ if(!next.done){ // do something that I want to do to the last element } val = next; next = iter.next(); } 但“下一个”变量似乎很笨拙。有更好的办法吗 当我检查mySe
let iter = mySet.values();
var val = iter.next();
var next = iter.next();
while(val.value){
if(!next.done){
// do something that I want to do to the last element
}
val = next;
next = iter.next();
}
但“下一个”变量似乎很笨拙。有更好的办法吗
当我检查mySet对象时,我看到一个带有值数组的[[Entries]]键,但我如何从Mozilla的:
“…next()方法,该方法返回一个具有两个属性的对象:value,序列中的下一个值;和done,如果序列中的最后一个值已被使用,则为true。”
您的方法没有问题。您可以在(!next.done)时使用,每次迭代只需使用next()
一次
要确定它是否是最后一个值,请将值存储在变量中,然后重新分配next
,然后在处理值之前检查done
函数*myGen(arr){
设i=-1;
而(++i
如果您不需要知道indexDoes javascript是否提供了迭代器.hasNext()
方法,那么可以使用for..of循环?从未在javascript中使用过它,但该方法在其他语言中提供那是一套吗?如果是这样,您的意思是.values()
?@zfrisch为什么设置会带来性能上的冲击?Set.has()比Array.find或Array.some或indexOf@zfrisch只是做了一个快速搜索,找到了一个有效的jsperf。问题的关键是能够知道我们什么时候在查看最后一个元素,并以不同的方式对待它。好的…简单的修复。。。检查next.done
在新赋值后也在循环内,并首先将循环内的值存储在变量中。然后,您可以在检查完成后和循环关闭前使用值,这样可以从我的方法中节省1行;初始值var val=iter.next()代码>。谢谢你的改进。但你是说,从根本上说,我仍然需要这两个变量来查看我何时处于最后一个元素?看起来你调用next的次数太多了。是的……在实践中,一个变量代表一个值,另一个变量代表下一个对象,这与你的次数相同。