遍历数组并删除项目,而不会中断循环

我有以下for循环,当我splice()用来删除项目时,然后得到的“秒数”是不确定的。我可以检查它是否未定义,但是我觉得可能有一种更优雅的方法来执行此操作。愿望是简单地删除一个项目并继续进行。

for (i = 0, len = Auction.auctions.length; i < len; i++) {

auction = Auction.auctions[i];

Auction.auctions[i]['seconds'] --;

if (auction.seconds < 0) {

Auction.auctions.splice(i, 1);

}

}

回答:

当您执行时,该数组将被重新索引.splice(),这意味着删除索引时将跳过索引,并且缓存.length已过时。

要解决此问题,您可能需要在i后面减一.splice(),或者简单地反向迭代…

var i = Auction.auctions.length

while (i--) {

...

if (...) {

Auction.auctions.splice(i, 1);

}

}

这样,重新索引不会影响迭代中的下一个项目,因为索引仅影响从当前点到数组末尾的项目,并且迭代中的下一个项目低于当前点。

以上是 遍历数组并删除项目,而不会中断循环 的全部内容, 来源链接: utcz.com/qa/403607.html

回到顶部