「含むか」の判定(配列, 文字列)

「含むか」の判定処理は様々な方法で実装できます。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 を比較

indexOfincludes の判定処理を比較します。

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 を比較

includestest の判定処理を比較します。

複数条件のとき

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メソッド を利用します。

わくわくBank.
フリーランスのエンジニアとして活動してます。ここでは、ソフトウェア開発で必要とされる技術、用語、概念を整理しています。