158 votes

Dans un tableau d'objets, le moyen le plus rapide de trouver l'index d'un objet dont les attributs correspondent à une recherche.

J'ai un peu navigué pour essayer de trouver un moyen efficace de le faire, mais je n'ai rien trouvé. J'ai un tableau d'objets qui ressemble à ceci :

array[i].id = some number;
array[i].name = some name;

Ce que je veux faire, c'est trouver les INDEX des objets où id est égal à, par exemple, l'un des 0, 1, 2, 3 ou 4. Je suppose que je pourrais simplement faire quelque chose comme :

var indexes = [];
for(i=0; i<array.length; i++) {
  (array[i].id === 0) ? { indexes[0] = i }
  (array[i].id === 1) ? { indexes[1] = i }
  (array[i].id === 2) ? { indexes[2] = i }
  (array[i].id === 3) ? { indexes[3] = i }
  (array[i].id === 4) ? { indexes[4] = i }
}

Bien que cela puisse fonctionner, il semble que cela soit assez coûteux et lent (sans parler de la laideur), surtout si array.length peut être grand. Avez-vous des idées pour améliorer un peu la situation ? J'ai pensé à utiliser array.indexOf d'une manière ou d'une autre mais je ne vois pas comment forcer la syntaxe. Voici

array.indexOf(this.id === 0);

par exemple, renvoie une valeur indéfinie, comme il se doit.

7voto

Nina Scholz Points 17120
array.forEach(function (elem, i) {  // iterate over all elements of array
    indexes[elem.id] = i;           // take the found id as index for the
});                                 // indexes array and assign i

le résultat est une liste de recherche pour l'id. avec l'id donné nous obtenons l'index de l'enregistrement.

6voto

Elliot Bonneville Points 18141
var indices = [];
var IDs = [0, 1, 2, 3, 4];

for(var i = 0, len = array.length; i < len; i++) {
    for(var j = 0; j < IDs.length; j++) {
        if(array[i].id == ID) indices.push(i);
    }
}

6voto

PulpDood Points 91

const index = array.findIndex(item => item.id === 'your-id');

Cela devrait vous donner l'index de l'élément dans le tableau avec id === votre-id.

array = [ {id:1}, {id:2} ];

const index = array.findIndex(item => item.id === 2);

console.log(index);

4voto

Silve2611 Points 850

Une nouvelle façon d'utiliser ES6

let picked_element = array.filter(element => element.id === 0);

3voto

Joe Privett Points 55

Utilisation de l'ES6 map fonction :

let idToFind = 3;
let index = someArray.map(obj => obj.id).indexOf(idToFind);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X