You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于动态关键词数组过滤JavaScript对象数组

实现方法

核心用Array.prototype.some()完成「任意匹配」的判断,这个方法会在数组中存在至少一项满足条件时返回true,完全适配你动态长度关键词、命中任意一个就保留职位的需求。

完整实现代码

先明确匹配范围:从你给出的示例数据看,关键词可能出现在role、position、languages、tools这几个字段中,你可以根据自己的需求增减要匹配的字段。

const keywords = ['React', 'Fullstack', 'Vue']

let result = jobs.filter(function(job) {
  // 把当前职位所有需要参与匹配的字段值整理成扁平数组,统一判断
  const matchPool = [
    job.role,
    job.position,
    ...job.languages,
    ...job.tools
  ]
  // 只要任意一个关键词存在于匹配池中,就保留当前职位
  return keywords.some(keyword => matchPool.includes(keyword))
})

逻辑说明

  • filter遍历职位数组时,回调函数返回true的条目会被存入最终结果
  • 把所有待匹配字段摊平到同一个数组,避免给每个字段单独写重复的判断逻辑
  • keywords.some()会遍历整个关键词数组,不管数组长度是1还是更多,只要有一个关键词命中匹配池,就会立刻返回true终止遍历,性能也有保障

用你给出的测试数据运行上述代码,两条职位都会被保留:第一条的tools字段包含React,第二条的role是Fullstack且tools包含React,都符合命中规则;如果关键词数组只有['Vue'],返回结果为空数组,符合预期。

可选扩展

不区分大小写匹配

如果需要忽略大小写(比如关键词写react也能匹配到字段值React),把判断逻辑改成如下形式即可:

return keywords.some(keyword => 
  matchPool.some(target => target.toLowerCase() === keyword.toLowerCase())
)

模糊匹配

如果需要支持部分匹配(比如关键词developer能命中position字段的Senior Frontend Developer),把全等判断换成字符串包含判断:

return keywords.some(keyword => 
  matchPool.some(target => 
    target.toLowerCase().includes(keyword.toLowerCase())
  )
)

内容的提问来源于stack exchange,提问作者danielCerulean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:22:03