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

启用useExtendedSearch后,如何用Fuse.js过滤嵌套数组匹配项?

Fuse.js嵌套数组搜索:保留内层匹配项的实现

你当前的问题是:使用Fuse.js的useExtendedSearch搜索包含嵌套数组的对象时,能正确匹配到外层数组项,但返回结果里的内层数组未被过滤,希望只保留与关键词完全匹配的内层对象。

你的代码示例

const data = [{
    "continent": "Asia",
    countries: [{
        name: "Korea"
      },
      {
        name: "Japan"
      },
      {
        name: "China"
      },
      {
        name: "Pakistan"
      },
    ]
  },
  {
    "continent": "Europe",
    countries: [{
        name: "Albania"
      },
      {
        name: "France"
      },
      {
        name: "England"
      },
      {
        name: "Spain"
      },
    ]
  },
  {
    "continent": "Africa",
    countries: [{
        name: "Algeria"
      },
      {
        name: "Angola"
      },
      {
        name: "Benin"
      },
      {
        name: "South Africa"
      },
    ]
  }
]

const options = {
  useExtendedSearch: true,
  keys: [
    "continent",
    "countries.name"
  ]
};

const fuse = new Fuse(data, options);

// 搜索关键词
const pattern = "=Pakistan"

console.log(fuse.search(pattern))
<script src="https://cdn.jsdelivr.net/npm/fuse.js@6.6.2"></script>

当前结果与期望结果对比

  • 当前返回结果:返回整个亚洲大陆对象,包含所有国家
  • 期望结果:返回亚洲大陆对象,但仅保留名称为"Pakistan"的国家

实现方案

Fuse.js默认只会返回匹配的外层父对象,不会自动过滤嵌套的子数组。要实现你的需求,需要在搜索结果的基础上手动过滤内层数组:

const pattern = "=Pakistan"
// 执行Fuse搜索
const fuseResults = fuse.search(pattern);
// 处理结果,过滤内层countries数组
const filteredResults = fuseResults.map(result => {
  const originalItem = result.item;
  // 提取关键词(去掉开头的=号)
  const keyword = pattern.slice(1);
  return {
    ...originalItem,
    countries: originalItem.countries.filter(country => country.name === keyword)
  };
});

console.log(filteredResults);

代码说明

  1. 先通过fuse.search()获取匹配的外层对象
  2. 遍历每个搜索结果,解构原始对象并重新生成新对象
  3. 使用filter()方法对countries数组进行过滤,只保留名称与关键词完全匹配的项
  4. 这里通过pattern.slice(1)去掉扩展搜索语法的=前缀,得到纯关键词

如果需要支持更复杂的匹配规则(比如模糊匹配),可以结合Fuse返回的matches字段定位具体匹配的内层对象后再过滤,但对于你的完全匹配场景,上述方法足够简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:21:02