5

index、openCursor、keyRangeを使用してindexeddbオブジェクトストアで大文字と小文字を区別しない検索を実行できるかどうか教えてください。大文字と小文字を区別して、
toUpperCase関数を使用して何かを実装できますが、さまざまなバリエーションがあります。それは実行可能ではありませんrelly...
どんな助けも歓迎します...ありがとう...試みの例:

var transaction = db.transaction("products", IDBTransaction.READ_ONLY);
var store = transaction.objectStore("products");
var descIndex = store.index('Index1');
var boundKeyRangeUpper = IDBKeyRange.bound(request.term.toUpperCase(), (request.term.toUpperCase()+'Z'));
descIndex.openCursor(boundKeyRangeUpper).onsuccess = function (e) 

更新
これは私が実装することになったものです:カバーする4つの範囲、すなわちFA、fA、Fa、fa ...これは最初の文字、すなわち「F」でのみ行われます

var boundKeyRangeUpper = IDBKeyRange.bound(term.toUpperCase(), term.toUpperCase()+'Z'); var boundKeyRangeUpper2 = IDBKeyRange.bound(term.toUpperCase(), term.toUpperCase()+'z'); var boundKeyRangeLower = IDBKeyRange.bound(term.toLowerCase(), term.toLowerCase()+'z'); var boundKeyRangeLower2 = IDBKeyRange.bound(term.toLowerCase(), term.toLowerCase()+'Z');

上記の検索結果は別のobjectStoreに保存されますが、説明は大文字であるため、FISH、FRUIT、FRESH SALAD ... F eg'r'の後に文字を押すと、検索はこの新しいオブジェクトストアを調べます。大文字です...これは理想的な解決策ではありませんが、機能し、私のニーズに迅速に対応します...おそらく、最終的には大文字と小文字を区別しない検索を取得しますが、そうではないかもしれません...

4

3 に答える 3

6

オブジェクトストアの構造を変更することをお勧めします。これは、キーの値が同じである列(つまり、ストア内の各オブジェクトのプロパティ)を大文字に追加し、代わりにこの新しいプロパティをキーにすることです。

//object
var lang = {
    name: 'Javascript',
    keyName: '', //THE NEW PROPERTY - KEY OF THE OBJECTSTORE
    interest: 100
};

ストアにオブジェクトを追加するときは、名前(または用語など)を大文字にして新しいプロパティを変更し、オブジェクトが次のようになるようにします。

//object
var lang = {
    name: 'Javascript',
    keyName: 'JAVASCRIPT', // NEW PROPERTY MODIFIED TO UPPERCASE OF OLD KEY
    interest: 100
};

次に、コードをそのまま続行します。

于 2012-03-15T15:42:29.303 に答える
4

Dexie.jsは、追加のインデックスなしで大文字と小文字を区別しない検索で優れた機能を果たします。

于 2014-03-27T13:47:48.383 に答える
1

表示される内容が表示される理由は、IndexedDBカーソルが辞書式順序で並べ替えられているためです。

このパラダイムでは、探しているもののように聞こえるアルファベット順の並べ替えとは異なり、>Aです。

アルファベット順の並べ替えを実現するには、辞書式順序ですべてのレコードをカーソルで移動し(のようにnullになるまでevent.target.resultonsuccess、結果を共有グローバルに追加し、辞書式順序が完了すると、辞書式順序でアルファベット順の並べ替えを返す必要があります。共有グローバル。

于 2012-03-20T22:40:26.737 に答える