ComparaisonComparaisons

find() vs filter()

find() renvoie le premier élément qui satisfait une condition, ou undefined, tandis que filter() renvoie un nouveau tableau avec tous les éléments qui ont passé le test.

Sur cette page

Comparaison point par point

#

Exemple

#
JavaScript
const users = [
  { id: 1, name: 'Léa', active: true },
  { id: 2, name: 'Lucas', active: false },
  { id: 3, name: 'Emma', active: true }
]

const oneUser = users.find((user) => user.active)
const activeUsers = users.filter((user) => user.active)

console.log(oneUser)
console.log(activeUsers)
Console
{ id: 1, name: 'Léa', active: true }
[{ id: 1, name: 'Léa', active: true }, { id: 3, name: 'Emma', active: true }]

Définition et utilisation

#

Les deux méthodes testent les éléments du tableau avec la même fonction de test (element, index, array) et ne modifient pas l’original. Elles diffèrent par ce qu’elles font du résultat du test : find() s’arrête au premier élément pour lequel la fonction renvoie une valeur vraie, tandis que filter() vérifie tous les éléments et les rassemble dans un nouveau tableau.

find() renvoie l’élément lui-même, ou undefined si aucun ne correspond. filter() renvoie toujours un tableau, même vide [], donc vous pouvez immédiatement continuer avec map() ou compter avec .length. Comme find() termine son travail dès la première correspondance, il peut être plus rapide sur de grands tableaux que filter(), qui parcourt toujours tous les éléments.

Le choix dépend du nombre d’éléments dont vous avez besoin. Vous cherchez un enregistrement précis, par exemple un utilisateur par id ? Utilisez find(). Vous avez besoin d’une liste d’éléments qui satisfont une condition, par exemple des utilisateurs actifs à afficher ? Utilisez filter().

Syntaxe

#
Syntaxe
array.find(callbackFn)
array.filter(callbackFn)

Plus d’exemples

#
Lecture sûre après find()
JavaScript
const products = [
  { slug: 'html', price: 0 },
  { slug: 'react', price: 199 }
]

const missing = products.find((product) => product.slug === 'vue')
const free = products.filter((product) => product.price === 0)

console.log(missing)
console.log(free.length)
console.log(missing?.price ?? 'Aucun produit')
Console
undefined
1
Aucun produit
find() vérifie moins d’éléments que filter()
JavaScript
const numbers = [1, 2, 3, 4, 5]

const checkedByFind = []
numbers.find((number) => {
  checkedByFind.push(number)
  return number > 2
})

const checkedByFilter = []
numbers.filter((number) => {
  checkedByFilter.push(number)
  return number > 2
})

console.log(checkedByFind)
console.log(checkedByFilter)
Console
[1, 2, 3]
[1, 2, 3, 4, 5]

find() s’arrête après avoir trouvé 3 et ne vérifie plus 4 et 5. filter() parcourt toujours tout le tableau.

Bonnes pratiques

#
  • Le résultat de find() peut être undefined. Sécurisez la lecture de ses propriétés avec l’opérateur ?..
  • Vous vérifiez seulement si un élément existe, sans avoir besoin de l’utiliser ? some() est plus lisible que de comparer le résultat de find() à undefined.
  • Quand vous avez besoin de la position de l’élément correspondant, et non de sa valeur, utilisez findIndex().

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.