小编典典

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

all

我有以下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);
    }           
}

阅读 90

收藏
2022-03-08

共1个答案

小编典典

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

要修复它,您要么需要i在 a 之后递减.splice(),要么只需反向迭代......

var i = Auction.auctions.length
while (i--) {
    ...
    if (...) { 
        Auction.auctions.splice(i, 1);
    } 
}

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

2022-03-08