私のアプリケーションでは、キーによる高速反復と高速ルックアップを実行できるコレクションが必要です。
サンプルデータ
var data = [
{ myId: 4324, val: "foo"},
{ myId: 6280, val: "bar"},
{ myId: 7569, val: "baz"},
... x 100,000
];
キーは、保存したいオブジェクトに含まれています。Harray(Hash Array)https://gist.github.com/3451147を一緒にハックしました。
使い方は次のとおりです
// initialize with the key property name
var coll = new Harray("myId");
// populate with data
data.forEach(function(item){ coll.add(item); });
// key lookup
coll.h[4324] // => { myId: 4324, val: "foo"}
// array functionality
coll[1] // => { myId: 6280, val: "bar"}
coll.map(function(item){ return item.val; }); // => ["foo", "bar", "baz"]
coll.length // => 3
// remove value
coll.remove(coll[0]); // delete => { myId: 4324, val: "foo"}
// by key
coll.removeKey(7569) // delete => { myId: 7569, val: "baz"}
// by index
coll.removeAt(0); // delete => { myId: 6280, val: "bar"}
除去速度は私が見ることができる唯一のトレードオフのようです。保存されたオブジェクトはとの間で共有されるためh
Object
、Array
2つのコピーは保存しません。
質問
for in
オブジェクトのプロパティを反復処理するために使用することに固執する必要がありますか?- オブジェクト自体ではなく、オブジェクトのキーの配列を保持しますか?
- 別のオプション?
注:ブラウザーの互換性は要因ではありません。これはクローム専用です。