在循环内从数组中删除项目时,您可能会遇到 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); } }
解决方案:
要解决此问题,请考虑两种方法:
递减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--; } }
反向迭代:从最后一个索引开始循环并反向迭代:
var i = Auction.auctions.length while (i--) { ... if (...) { Auction.auctions.splice(i, 1); } }
这样,重新索引仅影响后续元素,从而允许连续循环。
以上是在 JavaScript 中迭代时如何安全地从数组中删除项目?的详细内容。更多信息请关注PHP中文网其他相关文章!