我可以在JavaScript中获得对象和数组的好处吗?

时间:2014-02-19 13:31:07

标签: javascript arrays performance object

我的部分数据标记有分布在不同集合中的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获取特定数据集,那么它很慢,因为我必须手动搜索它们,但如果我遍历所有数据集,那就快了。

我不能快速直接访问和快速迭代吗?

3 个答案:

答案 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)