Fuse.js: Array like object 模糊搜索
Fuse.js: Fuzzy search in Array like object
我想对具有平面层次结构的对象执行模糊搜索。在 Fuse.js 的演示页面上,您必须指定要在对象中查找的一个或多个键。很遗憾,我没有特定的标识符。
Fuse.js 演示:
var books = [{
title: "Old Man's War",
author: {
firstName: "John",
lastName: "Scalzi"
}
}];
var fuse = new Fuse(books, { keys: ["title", "author.firstName"] });
我的设置:
const data = {
"100": "https://assets-cdn.github.com/images/icons/emoji/unicode/1f4af.png?v6",
"1234": "https://assets-cdn.github.com/images/icons/emoji/unicode/1f522.png?v6",
"+1": "https://assets-cdn.github.com/images/icons/emoji/unicode/1f44d.png?v6",
"-1": "https://assets-cdn.github.com/images/icons/emoji/unicode/1f44e.png?v6"
};
const fuse = new Fuse(data, { keys: ??? });
fuse.search('+1'); // should return "https://assets-cdn.github.com/images/icons/emoji/unicode/1f44d.png?v6",
您可以使用 Object.keys()
函数获取动态对象的键。如果您也希望支持旧版浏览器,您可以找到一个 polyfill 实现 here(在 Polyfill 下)。
然后,您可以提供 Fuse,这样的键:Object.keys(myobject)
.
编辑:
为了转换对象本身,您可以执行类似于 Jordan 建议的操作:
var newData = Object.keys(data).map(function(key) {
return { id: key, link: data[key]};
})
然后键数组是['id']
,你应该按id搜索。
首先解析你的data
:
const data = JSON.parse(json);
然后是一种方法(但肯定会比第二种建议慢,因为所有的键都包含在搜索中):
const fuse = new Fuse(data, { keys: data.keys() });
或者您可以动态更改数据结构:
let structuredData = [];
for (key in data)
structuredData.push({
"id": key,
"url": structuredData[key]
});
const fuse = new Fuse(structuredData, { keys: ["id"] });
我想对具有平面层次结构的对象执行模糊搜索。在 Fuse.js 的演示页面上,您必须指定要在对象中查找的一个或多个键。很遗憾,我没有特定的标识符。
Fuse.js 演示:
var books = [{
title: "Old Man's War",
author: {
firstName: "John",
lastName: "Scalzi"
}
}];
var fuse = new Fuse(books, { keys: ["title", "author.firstName"] });
我的设置:
const data = {
"100": "https://assets-cdn.github.com/images/icons/emoji/unicode/1f4af.png?v6",
"1234": "https://assets-cdn.github.com/images/icons/emoji/unicode/1f522.png?v6",
"+1": "https://assets-cdn.github.com/images/icons/emoji/unicode/1f44d.png?v6",
"-1": "https://assets-cdn.github.com/images/icons/emoji/unicode/1f44e.png?v6"
};
const fuse = new Fuse(data, { keys: ??? });
fuse.search('+1'); // should return "https://assets-cdn.github.com/images/icons/emoji/unicode/1f44d.png?v6",
您可以使用 Object.keys()
函数获取动态对象的键。如果您也希望支持旧版浏览器,您可以找到一个 polyfill 实现 here(在 Polyfill 下)。
然后,您可以提供 Fuse,这样的键:Object.keys(myobject)
.
编辑:
为了转换对象本身,您可以执行类似于 Jordan 建议的操作:
var newData = Object.keys(data).map(function(key) {
return { id: key, link: data[key]};
})
然后键数组是['id']
,你应该按id搜索。
首先解析你的data
:
const data = JSON.parse(json);
然后是一种方法(但肯定会比第二种建议慢,因为所有的键都包含在搜索中):
const fuse = new Fuse(data, { keys: data.keys() });
或者您可以动态更改数据结构:
let structuredData = [];
for (key in data)
structuredData.push({
"id": key,
"url": structuredData[key]
});
const fuse = new Fuse(structuredData, { keys: ["id"] });