首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fuse.js:类数组对象中的模糊搜索

Fuse.js:类数组对象中的模糊搜索
EN

Stack Overflow用户
提问于 2016-11-15 21:46:25
回答 2查看 8.8K关注 0票数 3

我想对一个平面层次结构的对象执行模糊搜索。在Fuse.js的演示页面上,您必须指定要在对象中查找的键/键。不幸的是,我没有特定的标识符。

Fuse.js演示:

代码语言:javascript
复制
var books = [{
  title: "Old Man's War",
  author: {
    firstName: "John",
    lastName: "Scalzi"
  }
}];
var fuse = new Fuse(books, { keys: ["title", "author.firstName"] });

我的设置:

代码语言:javascript
复制
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",
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-15 21:56:14

您可以使用Object.keys()函数获取动态对象的键。如果您也希望支持较旧的浏览器,您可以找到一个polyfill实现这里 (在Polyfill下)。

然后,你可以提供保险丝,像这样的钥匙:Object.keys(myobject)

编辑:

为了转换对象本身,您可以做一些类似于约旦建议的事情:

代码语言:javascript
复制
var newData = Object.keys(data).map(function(key) {
  return { id: key, link: data[key]};
}) 

然后键数组是['id'],您应该按id进行搜索。

票数 6
EN

Stack Overflow用户

发布于 2016-11-15 21:59:10

首先解析您的data

代码语言:javascript
复制
const data = JSON.parse(json);

然后有一种方法(但肯定会比第二条建议慢,因为搜索中包含了所有的键):

代码语言:javascript
复制
const fuse = new Fuse(data, { keys: data.keys() });

或者您可以动态地更改数据结构:

代码语言:javascript
复制
let structuredData = [];

for (key in data)
    structuredData.push({
        "id": key,
        "url": structuredData[key]
    });

const fuse = new Fuse(structuredData, { keys: ["id"] });
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40620268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档