首页 >web前端 >js教程 >在 JavaScript 中迭代时如何安全地从数组中删除项目?

在 JavaScript 中迭代时如何安全地从数组中删除项目?

Susan Sarandon
Susan Sarandon原创
2024-12-23 19:02:11407浏览

How to Safely Remove Items from an Array While Iterating in JavaScript?

在不中断循环的情况下迭代数组并删除项目

在循环内从数组中删除项目时,您可能会遇到 splice() 渲染后续元素的问题无法访问。这是因为 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);
    }           
}

解决方案:

要解决此问题,请考虑两种方法:

  1. 递减Index After Splice():用 splice() 删除一个项目后,递减“i”调整重新索引:

    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);
            i--;
        }           
    }
  2. 反向迭代:从最后一个索引开始循环并反向迭代:

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

这样,重新索引仅影响后续元素,从而允许连续循环。

以上是在 JavaScript 中迭代时如何安全地从数组中删除项目?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn