[go: up one dir, main page]

Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

Iterator : méthode filter()

Baseline 2025
Newly available

Depuis March 2025, cette fonctionnalité fonctionne sur les appareils et les versions de navigateur les plus récents. Elle peut ne pas fonctionner sur les appareils ou navigateurs plus anciens.

La méthode filter() des instances de Iterator retourne un nouvel objet d'aide à l'itérateur qui ne produit que les éléments de l'itérateur pour lesquels la fonction de rappel fournie retourne true.

Syntaxe

js
filter(callbackFn)

Paramètres

callbackFn

Une fonction à exécuter pour chaque élément produit par l'itérateur. Elle doit retourner une valeur équivalente à vrai pour que l'élément soit produit par l'objet d'aide à l'itérateur, et une valeur équivalente à faux sinon. La fonction est appelée avec les arguments suivants :

element

L'élément courant en cours de traitement.

index

L'indice de l'élément courant en cours de traitement.

Valeur de retour

Un nouvel objet d'aide à l'itérateur. À chaque appel de la méthode next() de l'objet d'aide, elle retourne l'élément suivant de l'itérateur pour lequel la fonction de rappel retourne true. Lorsque l'itérateur sous-jacent est terminé, l'objet d'aide à l'itérateur est également terminé (la méthode next() produit { value: undefined, done: true }).

Description

L'avantage principal des aides d'itérateur par rapport aux méthodes de tableau est qu'elles sont paresseuses, c'est-à-dire qu'elles ne produisent la valeur suivante que lorsqu'elle est demandée. Cela évite des calculs inutiles et permet également de les utiliser avec des itérateurs infinis.

Exemples

Utiliser la méthode filter()

L'exemple suivant crée un itérateur qui produit les termes de la suite de Fibonacci, puis lit les premiers termes qui sont pairs :

js
function* fibonacci() {
  let actuel = 1;
  let suivant = 1;
  while (true) {
    yield actuel;
    [actuel, suivant] = [suivant, actuel + suivant];
  }
}

const seq = fibonacci().filter((x) => x % 2 === 0);
console.log(seq.next().value); // 2
console.log(seq.next().value); // 8
console.log(seq.next().value); // 34

Utiliser filter() avec une boucle for...of

filter() est le plus pratique lorsque vous ne créez pas manuellement l'itérateur. Comme les itérateurs sont aussi itérables, vous pouvez parcourir l'aide retournée avec une boucle for...of :

js
for (const n of fibonacci().filter((x) => x % 2 === 0)) {
  console.log(n);
  if (n > 30) {
    break;
  }
}

// Affiche :
// 2
// 8
// 34

Ceci équivaut à :

js
for (const n of fibonacci()) {
  if (n % 2 !== 0) {
    continue;
  }
  console.log(n);
  if (n > 30) {
    break;
  }
}

Spécifications

Specification
ECMAScript® 2026 Language Specification
# sec-iterator.prototype.filter

Compatibilité des navigateurs

Voir aussi