如何设置 fuse.js 选项

How to set fuse.js options

const JSON = [
  {
    "name": "01,02"
  },
  {
    "name": "01"
  },
  {
    "name": "05"
  },
  {
    "name": "06,09"
  },
  {
    "name": "04,05"
  },
  {
    "name": "02,03"
  },
  {
    "name": "02,04,05"
  },
  {
    "name": "01,02"
  },
  {
    "name": "01,03"
  }
]


function foo (str) {
  const options = {
    keys: ['name'],
    threshold: 0,
    location: 0,
    distance: 100,
    minMatchCharLength: str.length
  }
  const _fuse = new Fuse(JSON, options)
  console.log(_fuse.search(str))
}

foo('03')
<script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/3.2.1/fuse.min.js"></script>

我正在尝试使用 fuse.js 进行过滤。我不确定如何使用这些选项。如果我使用 03 进行搜索,我不会返回任何结果。我试过改变位置和阈值但没有完全理解它。我将 minMatchCharLength 设置为查询字符串的长度,认为这样可以防止 01 的查询返回仅包含 0 的项。对吗?

尝试将 "name" 更改为 name:

const JSON =  [
  {
    name: "01,02"
  },
  {
    name: "01"
  },
  {
    name: "05"
  },
  {
    name: "06,09"
  },
  {
    name: "04,05"
  },
  {
    name: "02,03"
  },
  {
    name: "02,04,05"
  },
  {
    name: "01,02"
  },
  {
    name: "01,03"
  }
];

在这里您可以找到一个演示,它允许您 'play' 配置。 您可以粘贴 json 并尝试获得不同的结果: Link

关于配置的更多信息,您可以参考前面link的步骤2,其中解释了所有选项。 例如: threshold :匹配算法在什么时候放弃。 0.0 的阈值需要完美匹配(字母和位置),1.0 的阈值将匹配任何东西

这里有一个示例演示:jsfiddle

您的代码已经很好了。 您将阈值设置为 0,这意味着

fuse requires a perfct match (of both letters and location)

并且没有 name 属性 正好是 03.

因此,如果您 fiddle 仅使用阈值并将其设置为 0.2 例如 - 您将从搜索中获得一些结果:

[{name: "02,03"}, {name: "01,03"}]