[解決済み] forループを壊さずに配列をループして項目を削除する
2022-03-18 03:09:40
質問
以下のようなforループがあるのですが、その際に
splice()
を使用して項目を削除すると、'seconds' が未定義であると表示されます。 未定義かどうかをチェックすることもできますが、おそらくもっとエレガントな方法があるように思います。 願望としては、単に項目を削除して、そのまま続けたいのです。
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);
}
}
この方法では、再インデックス付けは、現在のポイントから配列の終わりまでのアイテムにのみ影響し、反復の次のアイテムは現在のポイントよりも低い位置にあるため、反復の次のアイテムに影響を与えません。
関連
-
vueが定義するプライベートフィルタと基本的な使い方
-
[解決済み】JavaScriptで「無効な日付」のDateインスタンスを検出する
-
[解決済み] CSSは常にJavascriptより優先されるべきか?
-
[解決済み] JavaScriptで配列を複製する最速の方法 - スライス vs. 'for'ループ
-
[解決済み] Javaでリストを反復処理する方法
-
[解決済み] typeof !== "undefined" vs. != null
-
[解決済み] JavaScriptのfor...of構文でループのカウンタ/インデックスを取得する
-
[解決済み] 同じページで複数のバージョンのjQueryを使用することはできますか?
-
[解決済み] jQueryはクラスごとに要素を数える - これを実装する最良の方法は何ですか?
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Vueがechartsのtooltipにクリックイベントを追加するケーススタディ
-
元のイベントが実行されなかった後に要素を追加するためのjQueryソリューション
-
Vueにシンプルなメモ帳機能を実装
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
vueの補間表現とv-textディレクティブの違いについて
-
vueにおけるv-forループオブジェクトのプロパティ
-
Vueの「データを聴く」原則を解説
-
[解決済み】React - uncaught TypeError: 未定義のプロパティ 'setState' を読み取れない
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み】 env: node: macにそのようなファイルやディレクトリはありません