ホームページ >ウェブフロントエンド >jsチュートリアル >JS 逆順トラバーサル実装コード_JavaScript スキル

JS 逆順トラバーサル実装コード_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 16:29:351694ブラウズ

最も一般的に使用されるトラバーサル方法は for ステートメントです (再帰メソッドや while メソッドもあります)。配列を反復処理するときは、通常次のことを行います:

コードをコピーします コードは次のとおりです:

var arr = [1,2,3,4,5,6,7,8,9,10];
for(var i=0,total=arr.length;i console.log(i,arr[i]);
}

これは最も一般的に使用されるトラバーサル方法、つまり前方トラバーサルです。配列内の最初の項目から最後の項目まで進みます。

では、なぜ今日のドラマでも逆順横断について言及しているのでしょうか?

ここで、小さなドラマで書かれたコンポーネントの中で最も一般的に使用されるモジュールの 1 つであるイベントについて触れなければなりません。カスタム イベント モデルの作成、イベントの監視とトリガーの処理、最も単純なパブリッシュおよびサブスクライブ (パブリッシュ/サブスクライブ) モードに使用されます。最近、メモリオーバーフローの危険性が潜んでいることが判明したため、独自にアンバインドメソッドを追加する必要がある。

同じイベント名のコールバック関数は同じ配列に配置されているため、バインドを解除するには、配列内で対応するコールバック関数を見つけて (同じコールバック関数が複数回バインドされている可能性があります)、それを削除するだけで済みます。

これは非常に単純な要件であるため、次のようなコードを記述するのが自然です:

コードをコピーします コードは次のとおりです:

//配列から 2
を削除します var arr = [1,2,2,2,2,1,1,2,2];
for(var i=0,total=arr.length;i if(arr[i] == 2){
//条件を満たしている場合は、
を削除します arr.splice(i,1);
}
}
console.log(arr);

通常のコードはありますが、最終的な出力結果は [1, 2, 2, 1, 1, 2] です。明らかに、実行結果は期待どおりではありません。

何が問題ですか?

慎重に分析した結果、配列内の後続の各項目が 1 つずつ進むため、削除操作が実行された後、照合が成功するたびに、次にチェックされる項目がスキップされることが問題であることがわかりました。 。

問題を発見し、コードを変更し、削除操作を実行した後にシーケンスインデックスインデックス (i) を調整しました。

コードをコピーします コードは次のとおりです:

//配列から 2
を削除します var arr = [1,2,2,2,2,1,1,2,2];
for(var i=0,total=arr.length;i if(arr[i] == 2){
//条件を満たしている場合は、
を削除します arr.splice(i,1);
//シーケンスインデックスを調整
i = i-1;
}
}
console.log(arr);

問題は解決しましたが、シーケンスのインデックスを変更するのは for ループのからかいであるとまだ感じています。それから私はひらめきがあり、バンバンバンと次のコードを入力しました:

コードをコピーします コードは次のとおりです:

//配列から 2
を削除します var arr = [1,2,2,2,2,1,1,2,2];
for(var i = arr.length-1;i!=-1;i--){
if(arr[i] == 2){
//条件を満たしている場合は、
を削除します arr.splice(i,1);
}
}
console.log(arr);

走査プロセスは変更されていません。唯一の変更点は、走査の順序が変更されたことです。ちなみに、変数の合計が 1 つ減りました。

今日書いたことは非常にばかげていることは認めますが、この例を通して、今後コードを記述するときに、配列自体の変更 (追加と削除) が含まれる場合は、次のように注意してください。逆走は、安全に走破する方法の比較です。

コーディングメモは、後で自分で笑えるように残しておいてください!

転載する場合は出典を明記してください:http://bh-lay.com/blog/148c07761fa

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。