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

Javascript 检查字符串是否包含数组中存在的任何关键字,javascript,ecmascript-6,ecmascript-2016,Javascript,Ecmascript 6,Ecmascript 2016,我试图根据数组中存在的关键字过滤某些内容,但不确定如何过滤,尝试使用包含、索引、和搜索功能,但在我的情况下不起作用 我的第一次尝试: const filters = ['movie', 'food'] contents .filter( content => filters.includes(content.name)) 问题是content.name是一个包含多个单词的字符串,例如“观看你最喜欢的电影”、“为你最喜欢的食物投票”等。我想检查字符串是否包含过滤器变量中的一个关键字。当前

我试图根据数组中存在的关键字过滤某些内容,但不确定如何过滤,尝试使用
包含
索引
、和
搜索
功能,但在我的情况下不起作用

我的第一次尝试:

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

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

您需要根据每个
内容检查
过滤器中的每个单词。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))

在字符串上使用正则表达式。为了回答这个问题,我刚刚学习了如何使用
some
方法hehehe:-)。