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);
    } 
}

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

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

相关文章:

javascript - 正则表达式逻辑和或

javascript - 如何从 Safari 4 的 Javascript 调试器中删除断点?

java - 关于 HashMap 的方法 containsValue 的困惑

vba - 使用 Excel VBA 循环浏览文件夹中的 .csv 文件并将文件名复制到最后一列的单元格中

vba - 宏不会进入下一个 WS

调用 javascript 库函数时出现 Javascript 错误

javascript - 当 cookie 存在时隐藏 div 元素

javascript - 如何在 chrome 开发人员工具时间轴中获得可重现的节点数?

ruby-on-rails - 编写具有字符串条件数组的 ActiveRecord 查询

python - 如何对两列进行分组并创建子图的循环?