「含むか」の判定処理は様々な方法で実装できます。includes、indexOf、test、match、searchなど利用できます。どれを利用したら良いか考えてみます。
目次
配列に特定要素が含まれるか
Arrayオブジェクトの includesメソッド
indexOfメソッド
が利用できます。
const arr = [40, 30, 20, 10]
if (arr.indexOf(20) !== -1) {
console.log(arr.indexOf(20))
console.log('存在します')
}
if (arr.indexOf(50) === -1) {
console.log(arr.indexOf(50))
console.log('存在しません')
}
console.log('----------------------------------------')
if (arr.includes(20)) {
console.log(arr.includes(20))
console.log('存在します')
}
if (!arr.includes(50)) {
console.log(arr.includes(50))
console.log('存在しません')
}
2
存在します
-1
存在しません
----------------------------------------
true
存在します
false
存在しません
true
false
で結果を返す includesメソッド
のほうがスッキリとした判定処理になります。
includesの注意点
IE11ではサポートされていません。利用したい場合、babel-polyfil
を導入するなどの対応が必要です。
文字列内に特定文字列が含まれるか
実現方法を整理
様々な方法で実現できます。
オブジェクト | メソッド | おすすめ度 | 補足 |
---|---|---|---|
String | indexOf | ○ | |
String | includes | ○ | IE11では使えない。babel-polyfil を導入するなどの対応が必要。 |
String | search | △ | できるけど本来の目的とは違う |
String | match | △ | できるけど本来の目的とは違う |
RegExp | test | ◎ |
indexOf と includes を比較
indexOf
と includes
の判定処理を比較します。
let str1 = 'xxxabcxxx'
let str2 = 'abc'
if (str1.indexOf(str2) !== -1) {
console.log(str1.indexOf(str2))
console.log('存在します')
}
console.log('----------------------------------------')
if (str1.includes(str2)) {
console.log(str1.includes(str2))
console.log('存在します')
}
3
存在します
----------------------------------------
true
存在します
true
false
で結果を返す includesメソッド
のほうがスッキリとした判定処理になります。
includes と test を比較
includes
と test
の判定処理を比較します。
複数条件のとき
let str1 = 'xxxdefxxx'
let str2 = 'abc'
let str3 = 'def'
let regexp = /abc|def/g
if (str1.includes(str2) || str1.includes(str3)) {
console.log('存在します')
}
console.log('----------------------------------------')
if (regexp.test(str1)) {
console.log('存在します')
}
存在します
----------------------------------------
存在します
testメソッド
のほうがスッキリとした判定処理になります。
大文字小文字を区別したくないとき
let str1 = 'xxxABCxxx'
let str2 = 'abc'
let regexp = /abc/ig
console.log(str1.includes(str2)) // false
console.log(regexp.test(str1)) // true
includesメソッド
の場合、大文字小文字を区別します。
なので、区別しないようにしたいときは testメソッド
を利用します。