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

标签 javascript loops

我有以下 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 已过时。

要修复它,您需要在 .splice() 之后减少 i,或者只是反向迭代...

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

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

关于javascript - 循环遍历数组并删除项目,而不会中断 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9882284/

相关文章:

python - 重复从字符串中删除字符

Java:在文本文件中进行比较

c# - SignalR Javascript 客户端 : Cannot Start Connection

javascript - 如何在js中用数组节点替换多字符串

php - 表单验证问题

c - 如何使用平方根优化c中的循环(完美、丰富、不足)

javascript计数器增量有点错误

javascript - 什么是 HTML 中的视口(viewport)。

c - 在数组 C 中使用 for 循环的正确方法

c - 使用 C 语言控制指令练习解决的问题