检查字符串是否包含数组中存在的任何关键字

pab*_*Bar 4 javascript ecmascript-6 ecmascript-2016

我想在此基础上的关键字存在于一个数组来过滤一些内容,但不知道该怎么做,尝试使用includes,indexof和search功能,但它并没有我的情况下工作.

我的第一次尝试:

const filters = ['movie', 'food']
contents
 .filter( content => filters.includes(content.name))
Run Code Online (Sandbox Code Playgroud)

问题是这content.name是一个包含多个单词的字符串,例如"看你最喜欢的电影","投票给你最喜欢的食物"等等,我想检查一个字符串是否包含过滤器变量中的一个关键字.目前includes()返回,false因为它试图匹配确切的字符串.

小智 7

您需要检查每个字filters对每个content.name.你可以做到这一点,当找到匹配时.some(),它将返回true(并提前停止搜索).

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

请注意,.includes()它将匹配单词的子部分.您需要建立单词边界,可能使用正则表达式,以获得完整的单词匹配.

您可以通过创建一个.test()正则表达式数组而不是字符串,并使用正则表达式的方法来完成此操作.

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

i如果它应该是不区分大小写的匹配,则将修饰符添加到每个正则表达式.

或者代替正则表达式数组,您可以使用单个正则表达式.

const filters = /\b(?:movie|food)\b/
const result = contents.filter(content => filters.test(content.name))
Run Code Online (Sandbox Code Playgroud)