6.4 Recherche d'éléments (Types de Références)
La recherche d'objets dans un tableau ne fonctionne pas comme celle des primitives. Tentons une comparaison naïve avec includes.
const courses = [
{ id: 1, name: 'a' },
{ id: 2, name: 'b' }
];
console.log(courses.includes({ id: 1, name: 'a' })); // false ! ?
Le résultat est false, ce qui peut surprendre. La raison : les objets sont des types de référence. L'objet qu'on passe à includes est un nouvel objet en mémoire, distinct de celui présent dans le tableau, même si leurs propriétés sont identiques. includes compare les références, pas le contenu, donc renvoie false.
La méthode find avec un prédicat
Pour chercher un objet par son contenu, JavaScript fournit find. Cette méthode prend en argument une fonction (un prédicat ou callback) qui sera exécutée pour chaque élément du tableau. Le prédicat doit retourner true quand on a trouvé ce qu'on cherche, false sinon.
const course = courses.find(function(course) {
return course.name === 'a';
});
console.log(course); // { id: 1, name: 'a' }
Si aucun élément ne correspond, find retourne undefined. La recherche s'arrête dès la première correspondance trouvée.
findIndex pour récupérer l'index
Si vous avez besoin de la position dans le tableau plutôt que de l'objet lui-même, utilisez findIndex. Le fonctionnement est identique, seul le retour change : index trouvé ou -1.
const idx = courses.findIndex(c => c.name === 'a');
console.log(idx); // 0
Notez la syntaxe ramassée avec une arrow function — sujet de la prochaine vidéo. find et findIndex sont à manipuler dès qu'on travaille avec des tableaux d'objets, ce qui est le cas standard dans les applications web modernes.