Array.find() en JavaScript : récupérer le premier élément qui correspond

find rend le premier élément qui passe le test, ou undefined : la différence avec filter, le traitement du cas absent et la famille findIndex.
3 min de lecture
Believemy logo

Retrouver un client par son identifiant, la première commande impayée, la ligne d'un tableau qui porte un drapeau : à chaque fois, on cherche un élément et un seul, et on veut s'arrêter dès qu'il est trouvé.

find fait exactement cela, là où un filtre parcourrait tout le tableau pour n'en garder qu'une case.


Définition

find est une méthode d'Array (tableau) qui rend le premier élément pour lequel la fonction répond vrai, puis cesse le parcours. Si aucun élément ne passe, elle rend undefined.

JAVASCRIPT
const clients = [
  { id: 1, email: "ada@site.fr" },
  { id: 2, email: "alan@site.fr" },
];

console.log(clients.find((c) => c.id === 2).email);   // "alan@site.fr"
console.log(clients.find((c) => c.id === 99));        // undefined

Ce que find rend est l'élément lui-même, pas un tableau d'un élément. Écrire filter(...)[0] donne le même résultat, mais parcourt tout et fabrique un tableau intermédiaire au passage.


Traiter le cas absent

L'undefined rendu est la source d'erreur la plus fréquente : lire une propriété dessus lève aussitôt une TypeError. Deux opérateurs suffisent à s'en protéger.

JAVASCRIPT
const trouve = clients.find((c) => c.id === 99);

console.log(trouve?.email ?? "inconnu");   // "inconnu"

Le Chaînage optionnel (?.) arrête la lecture si la valeur est absente, et la Coalescence des nuls (??) fournit la valeur de repli. Sans eux, il faut un if explicite, ce qui reste préférable quand l'absence mérite un traitement propre.


La famille complète

MéthodeCe qu'elle rendSi rien ne passe
findLe premier élémentundefined
findIndexLa position du premier-1
findLastLe dernier élémentundefined
indexOfLa position d'une valeur-1

La dernière ligne compare avec l'Égalité stricte (===), ce qui la réserve aux valeurs simples : sur des objets, elle ne retrouve que la référence exacte. Pour chercher sur un critère, il faut find ou findIndex.

findLast parcourt le tableau depuis la fin, ce qui évite de retourner une copie pour atteindre la dernière ligne d'un journal ou le dernier paiement accepté.


Questions fréquentes

Question

Comment distinguer « non trouvé » d'une valeur undefined ?

C'est la limite de find : un tableau contenant réellement undefined rend la même chose dans les deux cas. Passez alors par findIndex, dont le -1 ne peut pas être confondu avec une valeur du tableau.

Question

find ou Array.some() ?

Cela dépend de ce dont vous avez besoin ensuite. some répond par oui ou non et suffit à un test, find rapporte l'élément. Les deux s'arrêtent au premier succès, donc le choix se joue sur la lisibilité, pas sur la vitesse.

Question

Existe-t-il un équivalent sur un objet ?

Pas directement, un objet n'étant pas un tableau. On passe par Object.entries, qui rend un tableau de paires clé-valeur, puis on applique find sur la seconde case de chaque paire. Sur une collection consultée souvent, une structure Map évite ce détour et retrouve l'entrée sans parcourir quoi que ce soit.

Termes connexes

Découvrez notre glossaire JavaScript

Tous les mots de JavaScript expliqués simplement : mots-clés, objets natifs, méthodes, erreurs et concepts. Définitions claires et exemples qui tournent, pour apprendre et pour se dépanner.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.