Quelle est la meilleure méthode pour obtenir l'index d'un tableau qui contient des objets ?
Imaginez ce scénario :
var hello = {
hello: 'world',
foo: 'bar'
};
var qaz = {
hello: 'stevie',
foo: 'baz'
}
var myArray = [];
myArray.push(hello,qaz);
Maintenant je voudrais avoir le indexOf
de l'objet dont la propriété hello
est 'stevie'
qui, dans cet exemple, serait 1
.
Je suis assez novice en JavaScript et je ne sais pas s'il existe une méthode simple ou si je dois créer ma propre fonction pour faire cela.
[Array.prototype.findIndex][1] est pris en charge dans tous les navigateurs autres que IE (non-edge). Mais le [polyfill][2] fourni est agréable.
var indexOfStevie = myArray.findIndex(i => i.hello === "stevie");
La solution avec map est correcte. Mais vous devez itérer sur l'ensemble du tableau à chaque recherche. C'est seulement le pire cas pour findIndex qui arrête d'itérer une fois qu'une correspondance est trouvée.
var searchTerm = "stevie",
index = -1;
for(var i = 0, len = myArray.length; i < len; i++) {
if (myArray[i].hello === searchTerm) {
index = i;
break;
}
}
ou comme une fonction :
function arrayObjectIndexOf(myArray, searchTerm, property) {
for(var i = 0, len = myArray.length; i < len; i++) {
if (myArray[i][property] === searchTerm) return i;
}
return -1;
}
arrayObjectIndexOf(arr, "stevie", "hello"); // 1
Juste quelques notes :
Par exemple,
var a = {obj: 0};
var b = [a];
b.indexOf({obj: 0}); // -1 not found
[1] : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex [2] : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex#Polyfill