2017-12-31 208 views
3

キーワードは配列に含まれていますが、その方法はわかりませんが、includesindexofsearchの関数を使って試しましたが、私の場合はうまくいきません。配列に存在するキーワードが文字列に含まれていないか確認してください

私の最初の試み:

const filters = ['movie', 'food'] 
contents 
.filter(content => filters.includes(content.name)) 

問題はcontent.nameは、複数の単語を含む文字列は、たとえばなど、「あなたの好きな食べ物に投票」、「あなたの好きな映画を見る」ということであると私はかどうかを確認したいです文字列には、filters変数にキーワードの1つが含まれます。現在includes()は、正確な文字列に一致させるためにfalseを返します。

+0

文字列に正規表現を使用します。 – RMo

答えて

6

filtersの各単語をそれぞれcontent.nameと照合する必要があります。 .some()でこれを行うことができます。これはtrueを返します(検索を早期に停止します)。

const filters = ['movie', 'food'] 
const result = contents.filter(content => 
    filters.some(s => content.name.includes(s)) 
) 

.includes()は単語のサブセクションに一致します。単語全体を一致させるために、おそらく正規表現で単語境界を確立する必要があります。

文字列の代わりに正規表現の配列を作成し、正規表現の.test()メソッドを使用すると、これを行うことができます。

const filters = [/\bmovie\b/, /\bfood\b/] 
const result = contents.filter(content => 
    filters.some(re => re.test(content.name)) 
) 

それは大文字小文字を区別しないマッチングする必要があります場合には、各正規表現にi修飾子を追加します。

また、正規表現の配列の代わりに、単一の正規表現を使用することもできます。

const filters = /\b(?:movie|food)\b/ 
const result = contents.filter(content => filters.test(content.name)) 
+1

この質問に答える私はちょうど 'some'メソッドhehehe :-)を使う方法を学んだ。 – Ele

+1

有益な答えをありがとう! – pabloBar

関連する問題