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
的项目。正确吗?
答案 0 :(得分:1)
您的代码已经可以了。
您将阈值设置为0
,这意味着
fuse requires a perfct match (of both letters and location)
并且没有name
属性恰好是03
。
因此,如果您仅修饰阈值并将其设置为0.2
-例如,您将从搜索中获得一些结果:
[{name: "02,03"}, {name: "01,03"}]
答案 1 :(得分: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并尝试获得不同的结果: Link
有关配置的更多信息,您可以参考上一个链接的步骤2,其中介绍了所有选项。 例如:阈值:匹配算法在什么时候放弃。阈值0.0需要一个完美的匹配(字母和位置都可以),阈值1.0可以匹配所有内容
以下是带有您的示例的演示:jsfiddle