結論
pattern.some( pt => element.includes(pt) ) )
でチェックする。
- patternが検査に適用する特定のパターンの文字列を登録した配列
- elementがチェックしたい文字列
サンプルコード
const pattern = ['cat','dog','mouse']; const input = ['cat','house','dog','dog-dayo','do']; input.forEach( (element) => { console.log( "input:", element, "pattern.some( pt => element.includes(pt) result:", pattern.some( pt => element.includes(pt) ) ); });
実行結果
完全一致するdog
以外に、patternの文字列を含むdog-dayo
もtrue
で判定してくれる。
input: cat pattern.some( pt => element.includes(pt) result: true input: house pattern.some( pt => element.includes(pt) result: false input: dog pattern.some( pt => element.includes(pt) result: true input: dog-dayo pattern.some( pt => element.includes(pt) result: true input: do pattern.some( pt => element.includes(pt) result: false
検証詳細
Array.prototype.includes()を利用した場合。
Array.prototype.includes()
は要素の文字列と完全一致した、cat
、dog
のみ、true
となる。
サンプルコード
const pattern = ['cat','dog','mouse']; const input = ['cat','house','dog','dog-dayo','do']; input.forEach( (element) => { console.log( "input:", element, "pattern.includes() result:", pattern.includes(element) ); });
実行結果
完全一致するcat
とtrue
にならない。
これは、Array.prototype.includes()はそれぞれの要素に対して、SameValueZeroアルゴリズムで評価しているかららしい。
$ node test1.js input: cat pattern.includes() result: true input: house pattern.includes() result: false input: dog pattern.includes() result: true input: dog-dayo pattern.includes() result: false input: do pattern.includes() result: false
String.prototype.includes()を利用した場合。
Array.prototype.some()
は、配列を順番に関数にかけてチェックしtrueが一つでも出たらtrueとするメソッド。 それにArray.prototype.includes()
で対象の文字列が含まれるかをチェックすることで、やりたいことを実現する。
サンプルコード
const pattern = ['cat','dog','mouse']; const input = ['cat','house','dog','dog-dayo','do']; input.forEach( (element) => { console.log( "input:", element, "pattern.some( pt => element.includes(pt) result:", pattern.some( pt => element.includes(pt) ) ); });
実行結果
Array.prototype.includes()
のケースに加えて、dog-dayo
もtrue
と判断される。
これは、String.prototype.includes()
が、1 つの文字列を別の文字列の中に見出すことができるかどうかを判断しているかららしい。(Array.prototype.includes()
)と挙動が異なる。
$ node test2.js input: cat pattern.some( pt => element.includes(pt) result: true input: house pattern.some( pt => element.includes(pt) result: false input: dog pattern.some( pt => element.includes(pt) result: true input: dog-dayo pattern.some( pt => element.includes(pt) result: true input: do pattern.some( pt => element.includes(pt) result: false