Tengo un modelo con posiblemente miles de objetos. Me preguntaba cuál sería la forma más eficiente de almacenarlos y recuperar un solo objeto una vez que tenga su identificación. Las identificaciones son números largos.
Estas son las 2 opciones en las que estaba pensando. en la opción uno es una matriz simple con un índice incremental. en la opción 2 es una matriz asociativa y tal vez un objeto, si hace la diferencia. Mi pregunta es cuál es más eficiente, cuando en su mayoría necesito recuperar un solo objeto, pero también a veces recorrerlo y ordenarlo.
Opción uno con matriz no asociativa:
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];
}
}
Opción dos con matriz asociativa:
var a = []; // maybe {} makes a difference?
a[29938] = {id: 29938, name: 'name1'};
a[32994] = {id: 32994, name: 'name1'};
function getObject(id) {
return a[id];
}
Actualizar:
OK, entiendo que usar una matriz en la segunda opción está fuera de discusión. Entonces, la línea de declaración, la segunda opción realmente debería ser: var a = {};
y la única pregunta es: qué está funcionando mejor al recuperar un objeto con una identificación dada: una matriz o un objeto donde la identificación es la clave.
y también, ¿cambiará la respuesta si tendré que ordenar la lista muchas veces?
fuente