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

如何基于动态配置的多个对象key实现startsWith前缀过滤匹配

动态匹配搜索逻辑实现方案

核心逻辑通过遍历配置的searchKey数组,判断任意指定字段是否满足前缀匹配规则即可,同时可做性能优化和异常兼容处理,改造代码如下:

// 外部可动态修改的匹配字段配置
const searchKey = ['code', 'description', '自定义字段1', '自定义字段2']

function isMatch(obj) {
  // 提前处理搜索词为小写,避免循环中重复执行转小写逻辑
  const formattedSearch = search.toLowerCase()
  // 用some方法遍历匹配字段,只要有一个满足条件即返回true
  return searchKey.some(key => {
    // 兼容对象不存在对应key、字段不是字符串的异常场景
    const fieldValue = obj[key]
    if (typeof fieldValue !== 'string') return false
    return fieldValue.toLowerCase().startsWith(formattedSearch)
  })
}

如果需要更高的复用性,支持不同搜索场景传不同配置,可以封装为通用匹配生成函数:

/**
 * 生成匹配函数
 * @param {Array<string>} searchKey 要参与匹配的字段数组
 * @param {string} search 搜索关键词
 * @returns {Function} 匹配判断函数
 */
function createIsMatch(searchKey, search) {
  const formattedSearch = search.toLowerCase()
  return function(obj) {
    return searchKey.some(key => {
      // ES2020+ 可选链写法更简洁,不支持的环境替换为上面的显式判断即可
      return obj[key]?.toLowerCase?.().startsWith(formattedSearch) ?? false
    })
  }
}

// 使用示例
const isMatch = createIsMatch(['code', 'description', 'price'], '关键词')
const filterResult = dataList.filter(isMatch)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:06:03