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.
Expérimental: Il s'agit d'une technologie expérimentale.
Vérifiez attentivement le tableau de compatibilité des navigateurs avant de l'utiliser en production.
La méthode statique Iterator.zip() crée un nouvel objet Iterator qui agrège plusieurs éléments à partir de plusieurs objets itérables en retournant des tableaux contenant les éléments à la même position. Elle permet essentiellement de "zipper" les itérables d'entrée, permettant une itération simultanée sur eux.
La méthode Iterator.zipKeyed() est similaire, mais retourne des objets au lieu de tableaux, avec des clés que vous pouvez définir.
Un itérable d'itérables dont les éléments sont agrégés. Il doit être itérable et ne peut pas être un itérateur. Il doit être fini, bien que ses éléments puissent être des itérables infinis. Chaque élément doit implémenter soit le protocole itérable, soit, à défaut, le protocole itérateur. Les chaînes de caractères sont rejetées : pour zipper des chaînes de caractères, convertissez-les explicitement en itérateurs en utilisant Iterator.from().
options FacultatifUn objet qui définit le comportement en cas de longueurs d'entrée incohérentes. Il peut avoir les propriétés suivantes :
mode FacultatifL'une des valeurs suivantes :
Un objet itérable (pas un itérateur). Il n'est récupéré et validé que lorsque mode est "longest". Si undefined ou absent, les valeurs manquantes des itérables plus courts sont remplies avec undefined (ce qui équivaut à passer un itérable vide). Si un itérable est fourni, il est itéré pour le nombre de fois égal au nombre d'éléments dans iterables dès que Iterator.zip() est appelé. padding[i] est utilisé pour les valeurs manquantes de iterables[i] (en supposant que padding et iterables sont fournis sous forme de tableaux ; ce n'est pas obligatoire). Si padding est plus court que iterables, undefined est utilisé pour les itérables restants.
Un nouvel objet Iterator. Chacun de ses éléments est un tableau dont la longueur est égale au nombre d'itérables d'entrée, contenant les éléments de chaque itérable d'entrée à la position correspondante. Si l'objet iterables est vide, l'itérateur résultant est créé comme terminé.
La fonction Iterator.zip() se comporte comme une opération de transposition, produisant des tableaux contenant les éléments aux positions correspondantes dans chacun des entrées. Si nous représentons les itérables sous forme de tableaux, l'entrée peut ressembler à ceci :
L'itérateur résultant, quel que soit le mode, commencera par produire les tableaux suivants :
Après les trois premiers tableaux produits, l'itérable d'entrée b est épuisé lors du quatrième appel à next() — il retourne { fait: true }. Ce qui se passe ensuite dépend de l'option mode. Si mode est "shortest" (par défaut), l'itérateur résultant s'arrête ici : les deux autres itérables d'entrée sont fermés. Si le mode est "strict", une erreur est levée parce que les deux autres itérables ne sont pas terminés lorsque le deuxième retourne le résultat { fait: true }. Si mode est "longest", l'itérateur résultant continue à produire des tableaux, en remplissant les valeurs manquantes. Par exemple, si padding n'est pas fourni, il est par défaut undefined :
Si padding est fourni comme un itérable, et qu'il y a trois itérables d'entrée, les trois premières valeurs de l'itérable padding sont utilisées pour combler les valeurs manquantes. Supposons que padding soit un tableau [p1, p2, p3]. Alors p2 est utilisé pour combler la valeur manquante de l'itérable b, et p1 pour celle de l'itérable a :
Si l'itérable padding contient moins de trois valeurs, les valeurs manquantes restantes sont remplies par undefined.
En utilisant Iterator.zip(), vous pouvez itérer sur n'importe quel objet itérable (les chaînes de caractères ne sont pas prises en charge par défaut) tout en ayant accès à un compteur incrémental :
nombres est un itérateur infini qui génère des nombres croissants à partir de 0. Comme Iterator.zip() s'arrête par défaut lorsque l'itérable d'entrée le plus court est épuisé, la boucle s'exécute exactement trois fois. L'itérateur nombres est correctement fermé après la fin de la boucle ; il ne provoque pas de boucle infinie.
Supposons que vous ayez deux tableaux : l'un avec des clés et l'autre avec des valeurs. Vous pouvez utiliser Iterator.zip() pour les combiner en une Map :
Supposons que vous ayez des données provenant de plusieurs sources, telles que plusieurs microservices ou bases de données. Vous savez que chaque source fournit des données liées dans le même ordre, et vous souhaitez les traiter ensemble. Vous pouvez utiliser Iterator.zip() pour y parvenir :
Lorsque vous combinez des itérables de longueurs différentes avec mode défini sur "longest", vous pouvez fournir un itérable padding pour spécifier les valeurs utilisées pour remplir les entrées manquantes :
Les chaînes de caractères ne sont pas acceptées comme itérables d'entrée pour Iterator.zip(), car il est désormais considéré comme une erreur de rendre les chaînes implicitement itérables. Pour combiner des chaînes, convertissez-les explicitement en itérateurs en utilisant Iterator.from() :
Dans certains cas, vous souhaiterez peut-être découper par groupes de graphèmes plutôt que par unités de code. Dans ce cas, vous pouvez utiliser l'API Intl.Segmenter :
| Joint Iteration # sec-IteratorZip |
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.