我有以下 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
已经过时了。
要修复它,您需要减少i
之后.splice()
,或者简单地反向迭代......
var i = Auction.auctions.length
while (i--) {
...
if (...) {
Auction.auctions.splice(i, 1);
}
}
这样,重新索引不会影响迭代中的下一个项目,因为索引仅影响从当前点到数组末尾的项目,并且迭代中的下一个项目低于当前点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)