在循環內從數組中刪除項目時,您可能會遇到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); } }
解:
要解決此問題,請考慮兩種方法:
遞減>遞減> 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中文網其他相關文章!