Get to know MDN better
Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Depuis March 2026, 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 statique Iterator.concat() crée un nouvel objet Iterator à partir d'une liste d'objets itérables. Le nouvel itérateur produit les valeurs de chacun des objets itérables d'entrée, en séquence.
Un objet qui implémente le protocole itérable. Les itérateurs qui ne sont pas également itérables ne peuvent pas être passés directement à cette méthode ; ils doivent d'abord être enveloppés avec Iterator.from().
Un nouvel objet Iterator qui produit les valeurs de chacun des objets itérables d'entrée, en séquence.
La méthode Iterator.concat() est conceptuellement similaire à la méthode concat() de Array, mais elle fonctionne sur tout type d'objet itérable et retourne un itérateur au lieu d'un tableau. Cela signifie que les objets itérables peuvent être parcourus paresseusement, évitant ainsi des allocations ou des calculs inutiles. Cela signifie aussi que, techniquement, vous pouvez concaténer des objets itérables infinis, mais les résultats des objets itérables après le premier objet itérable infini ne seront jamais atteints.
Bien que chaque objet itérable puisse être infini, la liste des objets itérables doit être finie — et assez limitée en nombre car les moteurs imposent une limite très basse au nombre d'arguments de fonction. Si vous devez concaténer un grand nombre — voire un nombre infini — d'objets itérables, utilisez plutôt Iterator.prototype.flatMap().
La méthode Iterator.concat() est similaire en fonctionnalité à la fonction suivante, qui utilise l'opérateur yield* pour produire les valeurs de chacun des objets itérables d'entrée, en séquence :
Comme yield*, Iterator.concat() ne prend pas en charge les arguments qui ne sont pas itérables (c'est-à-dire qui n'ont pas la méthode [Symbol.iterator]()). Cela s'explique par le fait que Iterator.concat() prend toujours la possession de ses itérateurs et ferme les itérateurs ouverts lorsque la méthode se termine. Avec des arguments itérables, Iterator.concat() acquiert les itérateurs un par un et ferme simplement l'itérateur courant lorsque l'itération est arrêtée. Avec des arguments itérateurs, il n'est pas clair si c'est l'appelant ou Iterator.concat() qui doit être responsable de la fermeture des itérateurs, en particulier ceux que Iterator.concat() n'a pas atteints, donc la méthode interdit simplement les arguments non itérables.
Dans cet exemple, nous créons une nouvelle Map qui est l'union de trois autres maps. Le constructeur Map() accepte un objet itérable de paires clé-valeur, tandis que l'itérateur Map produit les paires clé-valeur de la map, donc utiliser simplement Iterator.concat() sur les maps suffit à créer la nouvelle map.
Notez que la valeur de la clé "a" dans la map résultante est 5. Cela s'explique par le fait que le constructeur Map utilise la dernière valeur pour chaque clé.
Lorsque l'un des objets itérables d'entrée est infini, l'itérateur résultant sera également infini. Ce n'est pas immédiatement un problème car les itérateurs peuvent être consommés paresseusement et fermés à tout moment, mais cela signifie que les objets itérables après le premier objet itérable infini ne seront jamais atteints.
Vous pouvez concaténer des objets itérables de types différents.
Les éléments de chaque objet itérable peuvent aussi être de types différents, tout comme les tableaux.
Les objets non itérables produisent une exception TypeError lorsqu'ils sont passés à Iterator.concat() car ils ne possèdent pas la méthode [Symbol.iterator]().
Comme tous les itérateurs intégrés étendent la classe Iterator, ils sont tous itérables et peuvent être passés à Iterator.concat().
Pour passer un itérateur qui n'est pas également itérable, vous pouvez l'envelopper avec Iterator.from().
Une autre option consiste à utiliser Iterator.prototype.flatMap(), qui appelle automatiquement Iterator.from(). Mais attention : vous devez appeler flatMap() sur un itérateur, pas sur un tableau, car Array.prototype.flatMap() ne prend en charge que les valeurs de retour de type tableau.
Lorsque vous implémentez vos propres itérateurs, pensez à les rendre itérables en sous-classant Iterator ou en ajoutant une méthode [Symbol.iterator]() qui retourne this.
| ECMAScript® 2027 Language Specification # sec-iterator.concat |
Activez JavaScript pour afficher ce tableau de compatibilité des navigateurs.
Cette page a été modifiée le 2 mars 2026 par les contributeur·ice·s du MDN.
Votre modèle pour un internet meilleur.
Visitez la société mère à but non lucratif de Mozilla Corporation, la Fondation Mozilla.
Certaines parties de ce contenu sont protégées par le droit d'auteur ©1998—2026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.