ループ内で配列から項目を削除すると、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); } }
解決策:
この問題を解決するには、次の 2 つのアプローチを検討してください:
デクリメント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 中国語 Web サイトの他の関連記事を参照してください。