我的部分数据标记有分布在不同集合中的ID。
我需要直接使用ID访问此数据,但我还需要非常快速地循环数据。
var listOfPartA = {
34523: { foo: 7, bar: 123},
6435: { foo: 2, bar: 163},
3123: { foo: 3, bar: 223},
...
};
var listOfPartB = {
34523: { baz: 1},
6435: { baz: 4},
3123: { baz: 6},
...
};
如果我需要为Id获取特定的数据缓存,那么它很快,但如果我尝试循环所有数据集,那么它很慢。
var listOfPartA = [
{ id: 34523, foo: 7, bar: 123},
{ id: 6435, foo: 2, bar: 163},
{ id: 3123, foo: 3, bar: 223},
...
];
var listOfPartB = [
{ id: 34523, baz: 1},
{ id: 6435, baz: 4},
{ id: 3123, baz: 6},
...
];
如果我想为这些对象的ID获取特定数据集,那么它很慢,因为我必须手动搜索它们,但如果我遍历所有数据集,那就快了。
我不能快速直接访问和快速迭代吗?
答案 0 :(得分:2)
预先索引数组:
var listOfPartA = [
{id:34523, foo:7 bar:123},
...
];
var lookupPartA = {};
listOfPartA.forEach(function(x,i) {lookupPartA[x.id] = i;});
现在,您可以使用listOfPartA
数组快速循环,但也可以快速找到:
listOfPartA[lookupPartA[34523]]
答案 1 :(得分:1)
预先索引您的对象:
var lookupPartA = {
34523: { foo: 7, bar: 123},
...
};
var listOfIds = Object.keys(lookupPartA);
现在,您可以在lookupPartA
对象中快速找到ID,但也可以快速循环:
for (var i=0, l=listOfIds.length; i<l; i++)
lookupPartA[listOfIds[i]]
答案 2 :(得分:-1)