我有一个可能包含数千个对象的模型。我想知道存储它们并在获得单个对象后检索单个对象的最有效方法是什么。id 是很长的数字。
所以这些是我正在考虑的 2 个选项。在选项一中,它是一个带有递增索引的简单数组。在选项 2 中,它是一个关联数组,也可能是一个对象,如果它有所不同的话。我的问题是当我主要需要检索单个对象时,哪个更有效,但有时也需要遍历它们并进行排序。
非关联数组的选项一:
var a = [{id: 29938, name: 'name1'},
{id: 32994, name: 'name1'}];
function getObject(id) {
for (var i=0; i < a.length; i++) {
if (a[i].id == id)
return a[i];
}
}
带有关联数组的选项二:
var a = []; // maybe {} makes a difference?
a[29938] = {id: 29938, name: 'name1'};
a[32994] = {id: 32994, name: 'name1'};
function getObject(id) {
return a[id];
}
更新:
好的,我知道在第二个选项中使用数组是不可能的。所以第二个选项的声明行应该是:var a = {};
唯一的问题是:在检索具有给定 id 的对象时什么表现更好:数组或其中 id 是键的对象。
而且,如果我必须多次对列表进行排序,答案会改变吗?