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

原生JavaScript实现对象数组多属性联合搜索返回无重复结果问询

多属性多关键词搜索过滤实现方案

现有代码核心问题

  • 未拆分多关键词:将整段输入作为单个匹配串,不支持空格分隔的多关键词同时匹配逻辑
  • 重复数据问题:同一个对象多个属性命中匹配规则时会被多次推入结果数组
  • 结果累加问题:全局定义的results变量不会在每次搜索前清空,多次调用搜索函数结果会叠加

调整后实现代码

const objects = [
  {laneId:"12345", lane:"HKG-SAV", equipmentType:"20'STD", sumOfContainers: "8", baseline:"$1234", new:"$1234", newSaving:"$1234"},
  {laneId:"12346", lane:"HKG-FRA", equipmentType:"20'STD", sumOfContainers: "8", baseline:"$1234", new:"$1234", newSaving:"$1234"},
  {laneId:"12347", lane:"HKG-LAX", equipmentType:"20'STD", sumOfContainers: "9", baseline:"$1234", new:"$1234", newSaving:"$1234"},     
];

const Search = (toSearch) => {
  // 拆分多关键词,过滤连续空格产生的空值
  const keywords = toSearch.trim().split(/\s+/).filter(k => k);
  // 无有效关键词时返回空数组,可根据需求调整为返回全部对象
  if (keywords.length === 0) return [];
  
  // 过滤满足所有关键词匹配规则的对象
  return objects.filter(item => {
    // 要求所有关键词都能在当前对象的任意属性中找到
    return keywords.every(keyword => {
      // 遍历对象所有属性值匹配关键词,统一转字符串避免类型差异导致匹配失败
      return Object.values(item).some(value => {
        return String(value).includes(keyword);
      });
    });
  });
}

效果验证

  • 调用Search('HKG'):返回全部3个对象
  • 调用Search('HKG 12345'):仅返回第一个laneId为12345的对象
  • 调用Search('8'):返回sumOfContainers为8的前2个对象
  • 调用Search('8 SAV'):仅返回同时匹配8和SAV的第一个对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:06:08