おそらく何千ものオブジェクトを持つモデルがあります。それらを格納し、IDを取得したら単一のオブジェクトを取得する最も効率的な方法は何だろうと思っていました。IDは長い数字です。
これらは私が考えていた2つのオプションです。オプション1では、インデックスが増加する単純な配列です。オプション2では、これは連想配列であり、違いがある場合はオブジェクトです。私の質問は、ほとんどの場合単一のオブジェクトを取得する必要があるが、時にはそれらをループしてソートする必要がある場合、どちらがより効率的かということです。
非連想配列のオプション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];
}
}
連想配列を使用したオプション2:
var a = []; // maybe {} makes a difference?
a[29938] = {id: 29938, name: 'name1'};
a[32994] = {id: 32994, name: 'name1'};
function getObject(id) {
return a[id];
}
更新:
はい、2番目のオプションで配列を使用することは問題外です。したがって、2番目のオプションの宣言行は、実際には次のようになります。var a = {};
唯一の問題は、指定されたIDを持つオブジェクトを取得する際のパフォーマンスが向上していることです。IDがキーである配列またはオブジェクトです。
また、リストを何度も並べ替える必要がある場合、答えは変わりますか?