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

标签 javascript ecmascript-6 ecmascript-2016

我正在尝试根据数组中存在的关键字过滤一些内容,但不确定该怎么做,尝试使用 includesindexofsearch 功能,但它在我的情况下不起作用。

我的第一次尝试:

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

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

最佳答案

您需要根据每个 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))

关于javascript - 检查字符串是否包含数组中存在的任何关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48043236/

相关文章:

javascript - 点击关闭按钮后模态自动重新打开

javascript - 为什么求幂运算符的左操作数为负时会出现语法错误?

javascript - Void 类型不可分配给 Boolean 类型(React/Typescript)

javascript - 我可以使用解构按程序导出 ESmodules 吗?

javascript - 用 500 行填充表格需要很长时间 - jQuery 和 Bootstrap CSS

javascript - 使用 Javascript 的 Ajax 请求在 iPhone 浏览器中不起作用

javascript - Marklogic xdmp.rollback() : Cannot read property 'result' of null

JavaScript 帮助器 | startsWith() 不是一个函数

javascript - Babel-preset-react 用三元运算符破坏条件 Array.map

node.js - 实验 `import` ES6 的最简单方法