对于我的应用程序,我需要一个可以通过键进行快速迭代和快速查找的集合。
示例数据
var data = [
{ myId: 4324, val: "foo"},
{ myId: 6280, val: "bar"},
{ myId: 7569, val: "baz"},
... x 100,000
];
密钥包含在我要存储的对象中。我一起破解了Harray(哈希数组)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
存储的对象在 the和 the之间共享,Array
所以我不存储任何东西的 2 个副本。
问题
- 我应该坚持使用
for in
来遍历对象属性吗? - 保留对象键的数组而不是对象本身?
- 其他选择?
注意:浏览器兼容性不是一个因素。这仅适用于 chrome。