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

JavaScript中基于关键词的数组/表格排序筛选实现

搜索筛选功能实现方案

基础过滤实现(仅展示匹配项,不排序)

核心逻辑是监听用户输入的关键词,统一转换为大小写不敏感的格式后,和列表项的name字段做包含匹配:

// 原始数据
const list = [
  {name: "Apple"},
  {name: "Grape"},
  {name: "Banana"},
  {name: "Pineapple"}
]

// 筛选函数,入参为用户输入的关键词
function filterList(keyword = '') {
  const trimedKeyword = keyword.trim()
  // 空关键词可根据需求返回原列表或者空列表
  if (!trimedKeyword) return list
  // 统一转小写实现大小写不敏感匹配
  const lowerKeyword = trimedKeyword.toLowerCase()
  return list.filter(item => {
    return item.name.toLowerCase().includes(lowerKeyword)
  })
}

调用示例:输入app时,返回结果为[{name: "Apple"}, {name: "Pineapple"}]

带匹配度排序的实现(匹配度越高排名越靠前)

如果需要对匹配结果按关联度重排,可以给每个匹配项加权重值,过滤后按权重倒序排列:

function filterAndSortList(keyword = '') {
  const trimedKeyword = keyword.trim()
  if (!trimedKeyword) return list
  const lowerKeyword = trimedKeyword.toLowerCase()
  return list
    .map(item => {
      const lowerName = item.name.toLowerCase()
      let weight = 0
      // 完全匹配权重最高
      if (lowerName === lowerKeyword) weight = 3
      // 开头匹配权重次之
      else if (lowerName.startsWith(lowerKeyword)) weight = 2
      // 中间包含匹配权重最低
      else if (lowerName.includes(lowerKeyword)) weight = 1
      return { ...item, weight }
    })
    // 过滤掉不匹配的条目,按权重倒序排列
    .filter(item => item.weight > 0)
    .sort((a, b) => b.weight - a.weight)
}

调用示例:输入app时,Apple属于开头匹配权重为2,Pineapple属于中间包含权重为1,排序后Apple会排在Pineapple前面。

扩展说明

  • 如果后续列表新增了其他需要匹配的字段,只需要修改匹配逻辑,比如要同时匹配名称和描述字段,增加|| item.desc.toLowerCase().includes(lowerKeyword)即可
  • 如果需要支持模糊匹配、拼音匹配等能力,可引入第三方拼音转换库,提前给每个列表项生成拼音字段后再做匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:36:03