У меня есть модель с возможно тысячами объектов. Мне было интересно, какой будет наиболее эффективный способ их хранения и извлечения одного объекта, когда у меня есть его 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];
}
Update:
ОК, я понимаю, что использование второго во втором варианте не может быть и речи. Таким образом, строка объявления второй вариант должен быть действительно: var a = {};
и единственный вопрос: что лучше выполняет поиск объекта с заданным id: массив или объект, где id является ключом.
а также изменится ли ответ, если мне придется сортировать список много раз?