У мене є модель з можливо тисячами об’єктів. Мені було цікаво, що було б найефективнішим способом їх зберігання та отримання одного об’єкта, як тільки у мене є його 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 = {};
і питання лише в тому, що ефективніше отримувати об'єкт із заданим ідентифікатором: масив або об’єкт, де ідентифікатор є ключовим.
а також зміниться відповідь, якщо мені доведеться сортувати список багато разів?