2

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. 那是对的吗?

4

2 回答 2

1

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

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

并且没有name确切的属性03

因此,如果您只是摆弄阈值并将其设置0.2为例如 - 您将从搜索中获得一些结果:

[{name: "02,03"}, {name: "01,03"}]
于 2018-08-29T09:44:23.957 回答
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"
  }
];

在这里,您可以找到一个演示,允许您“玩”这些配置。您可以粘贴您的 json 并尝试获得不同的结果: 链接

有关配置的更多信息,您可以参考上一个链接的第 2 步,其中解释了所有选项。例如:阈值:匹配算法在什么时候放弃。阈值 0.0 需要完美匹配(字母和位置),阈值 1.0 将匹配任何内容

这是一个带有您的示例的演示:jsfiddle

于 2018-08-29T06:38:27.947 回答