我正在尝试根据数组中存在的关键字过滤某些内容,但不确定如何执行此操作,尝试使用includes
,indexof
和search
函数,但在我的情况下,它没有起作用。
我的第一次尝试:
const filters = ['movie', 'food']
contents
.filter( content => filters.includes(content.name))
问题是content.name
是一个包含多个单词的字符串,例如"观看您最喜欢的电影","投票选择您最喜欢的食物"等我想要检查字符串是否包含filters变量中的一个关键字。目前includes()
会返回false
,因为它正在尝试匹配确切的字符串。
答案 0 :(得分:7)
您需要针对每个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))
修饰符添加到每个正则表达式中,如果它应该是不区分大小写的匹配。
或者代替正则表达式数组,您可以使用单个正则表达式。
node {
environment {
ENV_1 = 'value1'
}
env.ENV_2 = 'value2'
echo "${env.ENV_1}" // not worked (null)
echo "${env.ENV_2}" // worked (value2)
}