我有一个可能包含数千个对象的模型。我想知道一旦我有了它的 id,存储它们和检索单个对象的最有效方法是什么。id 是长数字。
所以这些是我正在考虑的两个选项。在选项一中,它是一个具有递增索引的简单数组。在选项 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 为键的对象。
而且,如果我必须多次对列表进行排序,答案会改变吗?