J'ai un modèle avec potentiellement des milliers d'objets. Je me demandais quelle serait la manière la plus efficace de les stocker et de récupérer un seul objet une fois que j'ai son identifiant. Les identifiants sont de longs nombres.
Alors voici les 2 options auxquelles je pensais. dans la première option, c'est un simple tableau avec un index croissant. dans la deuxième option, c'est un tableau associatif et peut-être un objet, si ça fait une différence. Ma question est laquelle est la plus efficace, lorsque j'ai principalement besoin de récupérer un seul objet, mais parfois aussi de les parcourir et de les trier.
Option une avec tableau non associatif :
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];
}
}
Option deux avec tableau associatif :
var a = []; // peut-être que {} fait une différence ?
a[29938] = {id: 29938, name: 'name1'};
a[32994] = {id: 32994, name: 'name1'};
function getObject(id) {
return a[id];
}
Mise à jour :
D'accord, je comprends qu'utiliser un tableau dans la deuxième option est hors de question. Donc la ligne de déclaration dans la deuxième option devrait vraiment être : var a = {};
et la seule question est : quel est le plus performant pour récupérer un objet avec un identifiant donné : un tableau ou un objet où l'identifiant est la clé.
et aussi, la réponse changera-t-elle si je dois trier la liste plusieurs fois ?
1 votes
Cela peut aider peut-être:: stackoverflow.com/questions/13309464/…
0 votes
Avez-vous besoin d'une collection triée en tout temps ? Si oui, il n'y a pas d'autre option qu'un tableau (bien que vous n'utilisiez pas les index comme vous le faites actuellement).
0 votes
@Jon en fait, si. Que voulez-vous dire par "comme vous le faites actuellement"?
1 votes
@MosheShaham: Les tableaux doivent avoir des index continus à partir de 0. Si vous utilisez des tableaux, ne faites rien d'autre.
1 votes
Je suppose que ce benchmark répondra à la première partie de votre question : jsben.ch/#/Y9jDP
0 votes
Cette question a été posée il y a près de dix ans, mais maintenant vous pourriez techniquement utiliser l'assemblage web pour optimiser les performances.