Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.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中使用Symbol.iterable进行迭代时,如何检测当前元素是最后一个元素?_Javascript_Arrays_Loops_Iterator - Fatal编程技术网

在Javascript中使用Symbol.iterable进行迭代时,如何检测当前元素是最后一个元素?

在Javascript中使用Symbol.iterable进行迭代时,如何检测当前元素是最后一个元素?,javascript,arrays,loops,iterator,Javascript,Arrays,Loops,Iterator,通过显式调用iterable在数组上循环,示例代码如下: let sampleArr = [4, 3, 56, 7, 7, 8, 9, 9]; let sampleArrIter = sampleArr[Symbol.iterator](); while (true) { let iterBody = sampleArrIter.next(); if (iterBody.done) { //loop ends break; } else

通过显式调用iterable在数组上循环,示例代码如下:

let sampleArr = [4, 3, 56, 7, 7, 8, 9, 9];
let sampleArrIter = sampleArr[Symbol.iterator]();

while (true) {
    let iterBody = sampleArrIter.next();
    if (iterBody.done) {
        //loop ends 
        break;
    } else {
        //loop continues - current element - iterBody.value
    }
}

我希望能够检测到当前元素是数组中的最后一个元素,这样我就可以在循环结束后执行特定的操作。当使用for循环时,我通过比较数组长度和当前索引来实现这一点。如何使用Symbol.iterator实现这一点?

这就是您想要的吗

让sampleArr=[4,3,56,7,7,8,9,9];
设sampleArrIter=sampleArr[Symbol.iterator]();
设lastElValue,lastElIndex=-1;
while(true){
让iterBody=sampleArrIter.next();
如果(iterBody.done){
//用最后一个元素做点什么
log(`${lastElValue}:${lastElIndex}`)
打破
}否则{
lastElValue=iterBody.value
拉斯特林指数++
//循环继续-当前元素-iterBody.value
}

}
这就是你想要的吗

让sampleArr=[4,3,56,7,7,8,9,9];
设sampleArrIter=sampleArr[Symbol.iterator]();
设lastElValue,lastElIndex=-1;
while(true){
让iterBody=sampleArrIter.next();
如果(iterBody.done){
//用最后一个元素做点什么
log(`${lastElValue}:${lastElIndex}`)
打破
}否则{
lastElValue=iterBody.value
拉斯特林指数++
//循环继续-当前元素-iterBody.value
}

}
试试这段代码,可能会对你有所帮助

  let sampleArr = [4, 3, 56, 7, 7, 8, 9, 9];
  let sampleArrIter = sampleArr[Symbol.iterator]();
  let lastIterator = sampleArrIter.next();
  let val = lastIterator.value;

  while (!lastIterator.done) {
     val = lastIterator.value;
     lastIterator = sampleArrIter.next();
  }

试试这个代码,可能会对你有帮助

  let sampleArr = [4, 3, 56, 7, 7, 8, 9, 9];
  let sampleArrIter = sampleArr[Symbol.iterator]();
  let lastIterator = sampleArrIter.next();
  let val = lastIterator.value;

  while (!lastIterator.done) {
     val = lastIterator.value;
     lastIterator = sampleArrIter.next();
  }

为什么不将后循环部分移到循环后面?我还需要最后一个元素来处理
if(iterBodu.done){doLastThing();break}else{doNormalThing();}
?这是一篇很棒的文章,因为当iterBody.done为true时,iterBody.value==undefined我知道我可以将最后一个元素值放在变量中,以便在iterBody.done时进行检查,但我正在寻找一个已经保留该值的位置,为什么不把循环后的部分移到循环后面呢?我还需要最后一个元素来处理
if(iterBodu.done){dolasthing();break}else{doNormalThing();}
?这是一篇很棒的文章,因为当iterBody.done为true时,iterBody.value==undefined我知道我可以在变量中放入最后一个元素值,以便在iterBody.done时进行检查,但我正在寻找一个已经保留该值的位置,而不是meSure this所声明的变量,我想确保在使用符号迭代器时,数组索引在其他任何地方都不可用(如在某些属性或原型中),我们需要通过给出自己的变量声明来获取索引值。另外,当{done:true}时,最后一个值在迭代器中的任何其他位置都不可用。因此,我不需要声明我们自己的变量来保存最后一个值。我要确保,当使用符号迭代器时,数组索引在其他任何地方都不可用(如在某些属性或原型中),我们需要通过给出我们自己的变量声明来获取索引值。另外,当{done:true}时,最后一个值在迭代器中的任何其他位置都不可用。所以我不需要声明我们自己的变量来保存最后一个值