【问题标题】:Check if string contains any keywords that exists in array检查字符串是否包含数组中存在的任何关键字
【发布时间】:2018-06-11 02:41:51
【问题描述】:

我正在尝试根据数组中存在的关键字过滤一些内容,但不确定如何执行此操作,尝试使用 includesindexofsearch 函数,但它不起作用我的情况。

我的第一次尝试:

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

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

【问题讨论】:

  • 对字符串使用正则表达式。

标签: javascript ecmascript-6 ecmascript-2016


【解决方案1】:

您需要对照每个content.name 检查filters 中的每个单词。您可以使用 .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 方法嘿嘿嘿:-)。
猜你喜欢
  • 1970-01-01
  • 2015-09-08
  • 2020-12-01
  • 2012-04-30
  • 2015-02-28
  • 2013-11-12
  • 1970-01-01
  • 2020-03-17
相关资源
最近更新 更多