Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有更好的方法来确定迭代器是否已达到其最后一个值?_Javascript_Iterator - Fatal编程技术网

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的次数太多了。是的……在实践中,一个变量代表一个值,另一个变量代表下一个对象,这与你的次数相同。