在Javascript中使用Symbol.iterable进行迭代时,如何检测当前元素是最后一个元素?
通过显式调用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
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}时,最后一个值在迭代器中的任何其他位置都不可用。所以我不需要声明我们自己的变量来保存最后一个值