2016-11-15 11 views
1

フラットな階層を持つオブジェクトに対してファジー検索を実行したいと思います。 Fuse.jsのデモページで、オブジェクト内で探すキー/キーを指定する必要があります。残念ながら私は特定の識別子を持っていません。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", 

答えて

3

あなたはObject.keys()機能を使用して、動的オブジェクト用の鍵を得ることができます。古いブラウザもサポートしたい場合は、ポリフィルの実装here(Polyfillの下にあります)を見つけることができます。

次に、Object.keys(myobject)のようなキーでヒューズを供給することができます。

EDIT:

var newData = Object.keys(data).map(function(key) { 
    return { id: key, link: data[key]}; 
}) 

そして、キー配列が['id']であり、あなたがIDで検索する必要があります

あなたはヨルダンが提案したものと類似した何かができるオブジェクト自体を変換するために。

+0

は、あなたにこのワットをゲルションありがとうございましたork。私は私のオブジェクトのすべてのキーを取得します。残念ながら、私はオブジェクトの代わりに配列で使用する必要があります。 GitHub APIは、JSONオブジェクトのみを返します。 – marcobiedermann

+0

@marcobiedermannあなたが 'Object.keys(data)'を与えた例を使うと、 '[100、1234、+1、 - 1]'が返されます。それはあなたが必要とするものではありませんか? –

+0

はい、あなたのコメントは正しいです。しかし、私が言及したように、Fuse.jsは配列を検索する必要があります。 GitHubはObjectを返します。 – marcobiedermann

2

まず、あなたの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"] }); 
+0

あなたの答えをありがとう。残念ながら、私は探したい配列を持っていません。 GitHub APIからの応答はJSONオブジェクト – marcobiedermann

+0

です。問題はありません。データが受信されると、まずその構造を変更します。私は私の答えを更新します。 –

+0

@marcobiedermannあなたは私の答えをもう一度チェックすることができます。 –

関連する問題