我有一个模型,里面可能有成千上万的物品。我想知道如何最有效地存储它们,并在获得一个对象的 id 后检索该对象。身份证上的号码很长。
这就是我考虑的两个选择。在选项1中,它是一个具有递增索引的简单数组。在第二个选项中,如果它有所不同,它可能是一个关联数组,也可能是一个对象。我的问题是,当我主要需要检索单个对象,但有时也需要遍历它们并进行排序时,哪一个更有效。
第一种选择是不带关联数组的:
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 为键的对象。
还有,如果我要对列表进行多次排序,答案是否会改变?