【Javascript】「配列に存在するか?」も「文字列に含むか」もindexOfで解決できる!

どのプログラミング言語を使っていても文字列や配列に対して「特定の文字列が含まれているか?」「配列内に存在するか?」という判定を行うことがよくあります。

それにまつわることで、「indexOf」に対してなるほどと妙に腑に落ちたことがあったので記事にします。言語は「javascript」です。

実際に見てみる

まずは実際にどのような結果になったかを見てみます。

// 文字列
var string = "This is Luck.";
// 配列
var array = ["this", "is", "Luck", "."];

テストする文字列と配列を用意しました。

// 文字列検索
document.write("文字列検索:"+string.indexOf("Luck")+"<br>");
// 配列の要素検索
document.write("配列の要素検索:"+array.indexOf("Luck"));

それぞれ、「Luck」が含まれるかをindexOf(上記)で調べてみます。
実際に下記で実行しましたのでご確認ください。

文字列検索の方は最初に文字が現れる位置を返してくれます。0始まりですので、「This」を探したとすると、「0」が返ってきます。thisの「t」が0番目ということです。よって、「Luck」の「L」は「8」が返ってきます。

配列の要素検索も同じく0始まりですので、0番目が「this」、1番目が「is」となり、「Luck」は2番目となります。

indexOfの意味を考えると

「index」は索引という意味です。

書物の中の語句や事項の所在を捜し出す手引として編集した表や書物。
「索引」でGoogle検索

つまり、目次みたいなことですね。文字列も配列も最初に見つかった位置を返してくれます。

言葉の意味からですと、個人的には配列の方がしっくりきます。
しっくりくる理由は、配列のarray[i]の「i」の部分をインデックスと呼ぶからだと思います。

それでは、今回妙に腑に落ちた文字列検索の方にフォーカスします。

文字列検索について

// 文字列
var string = "This is Luck.";
// 配列
var array = ["this", "is", "Luck", "."];

上記の「This is Luck.」は1文字ずつの配列として扱えます。

どういうことかと言いますと、string[0]は”T”、string[1]は「h」、string[2]は「i」、string[3]は「s」、string[4]は「 」・・・ということです。よってfor文で回すこともできますので、下記で実際に何が入っているか確認してみます。

予想通りの結果になりました。

何が言いたいかと言いますと、今回の「Luck」で考えると「search = [“L”, “u”, “c”, “k”]」という部分配列が存在するかどうかを検索してくれて、見つかれば最初の位置(インデックス)を返してくれるということかと納得しました。
※あっているかは別の話です。すみません

納得した理由が分かりにくいかと思いますが…
indexOfが配列を対象とした関数と考えられ、文字列も配列として考えれば、文字列にも配列にもindexOfは同じように使える
という感じで妙に納得できたというお話でした。

実はindexOfは文字列検索でしか使った記憶はなかったので、寧ろ配列にも使えるんだーということからスタートしました。ちなみに、見つからない場合は「-1」を返すので判定で利用できます。

分かりにくい話でしたが、最後まで読んでいただきありがとうございましたm(__)m