web関連

【javascrpt】indexOf()メソッドを使って特定の文字があるかどうか調べる

indexOf()メソッドを使って配列の中に特定の文字があるかどうか調べたかった時に条件分岐の処理が思い通りにいかなかった時の備忘録

indexOf()を使っての条件分岐の書き方

まず、indexOf()メソッドの処理で指定した文字列がなかった時って-1を返すのと、指定した文字列が配列内の先頭にあると0を返すみたい
さらに0はtrue判定にならないから

var array = ['english','japanese','other'];
if (array.indexOf('english') >= 0 ) {
    console.log('true');// 配列の0番目にあるのでtrue
}else{
    console.log('false');
}

っていう風に>= 0を書く必要性があるみたい
indexOf()メソッドは0から数えるのと>= 0は0と同じかそれ以上って処理

一応書き出し

console.log(array.indexOf('english'));// 0
console.log(array.indexOf('japanese'));// 1
console.log(array.indexOf('other'));// 2
if (array.indexOf('特定の文字')) {…};って書いていたわ
ちゃんと条件を満たした時に何の値が返されるのか確認せんとあかんね

おまけ:文字列内の検索もできる

配列に使うもんだと思っていたら、文字列の検索でも使えるみたいなのでメモ

var p = 'this is テスト.';
console.log(p.indexOf('this'));// 0
console.log(p.indexOf('is'));// 2(thisの方当たってるわ)
console.log(p.indexOf('is テ'));// 5(半スペもカウントするみたい)
console.log(p.indexOf('test'));// -1(文字列無いから)
console.log(p.indexOf('ト'));//10(マルチバイト文字もカウントは1なんすね)

if (p.indexOf('this') >= 0) {
    console.log('true');//0番目にあるのでtrue
}else{
    console.log('false');
}

先頭から何番目にあるか数えてくれるみたい

ブログのリニューアル作業で使っててif (array.indexOf('特定の文字')) {…};でTURE判定できるもんだと思っていたら処理が思っていたものと真逆の処理をするから、なんでだ?って思い調べたら書き方違った
よくよく考えればindexって数とか表した気がするしindex of ○○「○○の数」って考えれば数値を返すのはわかりそうなもんだわ

Leave a Comment

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。