JavaScriptで配列(セット)を検索する

特定の(文字列)値が有効な値のセットに該当するかどうかを判断する必要があるときに、最近問題を解決しました。

JavaScript 1.6に 、配列を検索するArrayオブジェクトのindexOfメソッドがありますが、このメソッドはInternet Explorerではサポートされていません。 IEの場合、このメソッドは配列をループすることで実装されます。

しかし、要素の順序は重要ではなく、1ミリ秒ごとにカウントされていたため、配列内のループ列挙のパフォーマンスを他の検索オプション(列挙なし)と比較しました。



また、検索なしの検索オプションは次のとおりです。

  1. 配列を文字列に接着して文字列を検索する

    if (myarray.join().search( " " ) != -1) { ... }



    * This source code was highlighted with Source Code Highlighter .






    この方法を使用する場合、配列から接着された文字列内の検索部分文字列の出現の一意性を考慮する必要があります。 これを行うには、たとえば、文字列にアプリオリではない接着文字を使用できます。

    if (("#" + myarray.join("#,#") + "#").search( "# #" ) != -1) { ... }



    * This source code was highlighted with Source Code Highlighter .








  2. 配列の代わりにオブジェクトを使用する「ハッシュキー」はハッシュキーです

    if ( " " in myarray) { ... }



    * This source code was highlighted with Source Code Highlighter .








3つの検索方法のそれぞれのパフォーマンスを評価するために、「StringN」という形式の100,000行が作成されるテストページを作成しました。ここで、Nは行番号で、次に「String60000」という文字列が検索されます。

IE6でもin演算子はほぼ瞬時に動作することが判明しました(ランタイムは常に0です)!



テスト結果(Celeron 2.4)



ブラウザ String.search Array.indexOf
IE6 ゼロ 94 2859
IE7 ゼロ 125 390
Ff2 ゼロ 2016年 31
Ff3 ゼロ 71 3
O9 ゼロ 281 47
Safari3 ゼロ 188 31


検索時間(ミリ秒)。



All Articles