ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript で反復中に配列から項目を安全に削除するにはどうすればよいですか?

JavaScript で反復中に配列から項目を安全に削除するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-23 19:02:11
オリジナル
419 人が閲覧しました

How to Safely Remove Items from an Array While Iterating in JavaScript?

ループを中断せずに配列を反復処理し、項目を削除する

ループ内で配列から項目を削除すると、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 つのアプローチを検討してください:

  1. デクリメント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--;
        }           
    }
    ログイン後にコピー
  2. 逆方向に反復します: 最後のインデックスからループを開始し、逆方向に反復します:

    var i = Auction.auctions.length
    while (i--) {
        ...
        if (...) { 
            Auction.auctions.splice(i, 1);
        } 
    }
    ログイン後にコピー

このようにして、インデックスの再作成は後続の要素のみに影響し、継続的なインデックスの作成が可能になります。ループします。

以上がJavaScript で反復中に配列から項目を安全に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート