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
おまけ:文字列内の検索もできる
配列に使うもんだと思っていたら、文字列の検索でも使えるみたいなのでメモ
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 ○○「○○の数」って考えれば数値を返すのはわかりそうなもんだわ
if (array.indexOf('特定の文字')) {…};
って書いていたわちゃんと条件を満たした時に何の値が返されるのか確認せんとあかんね