結論
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