HOME

{ JS : indexOf メソッド と同じ戻り値の関数作成 }

{ svg, javascript で作成したプログラム一覧 }

推奨 ブラウザ : chrome

myIndexOf 関数で文字列中の検索文字の有無

文字列で処理 : myIndexOf [ 関数 ]

文字列 : var str += x 15 + ;
文字数 : 786450 文字
検索文字 :
インデックス : 0
処理時間 : 0 ms
[ 文字列 : 25 文字以内 ] [ 検索文字 : 4 文字以内 ]

一文字づつ処理 : myCharAt [ 関数 ]

文字列 : var str += x 15 + ;
文字数 : 786450 文字
検索文字 :
インデックス : 0
処理時間 : 0 ms
[ 文字列 : 25 文字以内 ] [ 検索文字 : 4 文字以内 ]

String : indexOf [ メソッド ]

文字列 : var str += x 15 + ;
文字数 : 786450 文字
検索文字 :
インデックス : 0
処理時間 : 0 ms
[ 文字列 : 25 文字以内 ] [ 検索文字 : 4 文字以内 ]

String の indexof メソッドと同じ返り値を返す関数を書いてみました。
検索開始の位置指定は出来ていません。
文字列の頭から検索して、検索文字が含まれる場合は、 Index を返し、
含まれない場合は、 -1 を返す所までです。

文字列を読む際に、 str[ i ] として配列で文字を取得しています。
charAt()メソッドも試したのですが、確認した範囲では、配列より遅い結果でした。
作成するにあたり、 なるべく String クラスのメソッドは、
なるべく使用しないようにして作成しました。
文字の連結には、 while を使用しました。
これも、 substring などで文字列を抜き出すと違う結果になるのかもしれません。
indexof が圧倒的に高速だったので、試す気力が。。。

作成した関数は、 myCharAt(), myIndexOf() の2種類です。
myCharAt は、検索する文字列を一文字づつ読み、検索対象文字列と比較しています。
myIndexOf は、検索する文字列を検索対象文字列と比較しています。
予想では、前者のほうが処理時間が長く掛かると思っていましたが、
実際にコードを走らせてみると、前者の処理時間が短い結果になりました。
同じ検索対象文字列でテストしてみると、
前者の myCharAt 関数は、処理の回数が myCharAt 4063244 回、
myIndexOf 関数は、 12582944 という結果でした。

このプログラムでは、それぞれの関数とメソッドで、初期値で 3145746 文字の 処理を行います。
環境によっては、ブラウザが反応しなくなる可能性があります。
実際に何回もブラウザがクラッシュしてます。
テストした範囲では、 IE ブラウザでの処理時間が最も長く、chrome が最速という結果でした。
負荷が掛かるプログラムなので、処理する文字数を制限してます。
最大、 25 文字を 繰り返し処理で 15 回足します。
最大で、786450 文字くらい?の検索対象文字列から、検索文字を検索します。
検索文字列の文字数は、 4 文字までです。

テストした範囲では、 indexof メソッド が圧倒的に高速でした。
分かってはいたけど、試してみました。ヽ(´ー`)ノ

数学の勉強をやり直ししてたりします。_´ω`)_