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

JavaScript 对象数组精确查询及最高匹配度近似对象查找问题

近似匹配功能实现方案

核心实现逻辑

  • 第一步:先执行原有精确匹配逻辑,若有结果直接返回即可,无需后续近似匹配流程
  • 第二步:若完全匹配结果为空,遍历所有待检索的对象,为每个对象计算与检索条件的匹配得分:即和检索条件中键值对完全相等的属性数量
  • 第三步:筛选出所有得分最高的对象(可能存在多个得分相同的最高匹配项)
  • 第四步:针对每个最高匹配项,分别梳理匹配成功的属性列表、匹配失败的属性列表
  • 第五步:按照需求格式拼接提示文案返回

代码实现示例

// 入参说明:searchCondition 为用户输入的检索条件对象,例如 {postHeight: '6', type: 'CL', barb: 'straight'}
// dataArray 为你的原始对象数组
function getMatchResult(searchCondition, dataArray) {
  // 1. 执行原有精确匹配逻辑
  const exactMatch = dataArray.filter(item => {
    return Object.entries(searchCondition).every(([key, value]) => item[key] === value)
  })
  if (exactMatch.length > 0) {
    return {
      type: 'exact',
      data: exactMatch,
      msg: `找到${exactMatch.length}个完全匹配结果`
    }
  }

  // 2. 无完全匹配时,计算每个对象的匹配得分和匹配/不匹配属性
  const conditionKeys = Object.keys(searchCondition)
  const scoredList = dataArray.map(item => {
    const matchedKeys = []
    const mismatchedKeys = []
    conditionKeys.forEach(key => {
      if (item[key] === searchCondition[key]) {
        matchedKeys.push(key)
      } else {
        mismatchedKeys.push(key)
      }
    })
    return {
      item,
      score: matchedKeys.length,
      matchedKeys,
      mismatchedKeys
    }
  })

  // 3. 筛选最高匹配得分的所有结果
  const maxScore = Math.max(...scoredList.map(i => i.score))
  // 无任何属性匹配时直接返回无结果提示
  if (maxScore === 0) {
    return {
      type: 'none',
      data: [],
      msg: '未找到匹配结果'
    }
  }
  const bestMatchList = scoredList.filter(i => i.score === maxScore)

  // 4. 生成提示文案,以下示例取第一个最优匹配的属性差异生成通用提示,可根据业务调整
  const sampleMatch = bestMatchList[0]
  const matchedStr = sampleMatch.matchedKeys.join('、')
  const mismatchedStr = sampleMatch.mismatchedKeys.join('、')
  const msg = `未找到完全匹配结果,但存在${matchedStr}正确、${mismatchedStr}不匹配的近似结果,共${bestMatchList.length}个`

  return {
    type: 'approximate',
    data: bestMatchList.map(i => i.item),
    matchedKeys: sampleMatch.matchedKeys,
    mismatchedKeys: sampleMatch.mismatchedKeys,
    msg
  }
}

边界场景优化

  • 若多个最优匹配的匹配/不匹配属性不一致,可调整逻辑为分别输出每个匹配项的差异,或统计所有最优匹配的公共匹配属性输出
  • 若检索条件为空可直接返回全量数据,或根据业务逻辑做拦截处理
  • 若属性值为数字、布尔等其他类型,可根据实际需求调整相等判断逻辑,避免类型差异导致的误判

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 13:36:04