我有以下 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);
}
}
原文由 dzm 发布,翻译遵循 CC BY-SA 4.0 许可协议
当您执行
.splice()
时,数组将被重新索引,这意味着您将在删除索引时跳过索引,并且缓存的.length
已过时。要修复它,您需要在
.splice()
之后减少i
,或者只是反向迭代……这样重新索引不会影响迭代中的下一项,因为索引只影响从当前点到数组末尾的项,并且迭代中的下一项低于当前点。