Maison interface Web js tutoriel Explication détaillée des itérateurs et des générateurs dans les compétences JavaScript_javascript

Explication détaillée des itérateurs et des générateurs dans les compétences JavaScript_javascript

May 16, 2016 pm 04:32 PM
javascript 生成器 迭代器

Le traitement de chaque élément d'une collection est une opération très courante. JavaScript offre de nombreuses façons de parcourir une collection, des simples boucles for et for each aux compréhensions map(), filter() et tableau. Dans JavaScript 1.7, les itérateurs et les générateurs apportent de nouveaux mécanismes d'itération à la syntaxe JavaScript de base et fournissent également un mécanisme permettant de personnaliser le comportement des boucles for...in et for each.

Itérateur

Un itérateur est un objet qui accède à un élément d'une séquence de collection à la fois et garde une trace de la position actuelle de l'itération dans la séquence. En JavaScript, un itérateur est un objet qui fournit une méthode next() qui renvoie l'élément suivant de la séquence. Cette méthode lève une exception StopIteration lorsque tous les éléments de la séquence ont été parcourus.

Une fois qu'un objet itérateur est créé, il peut être appelé explicitement en appelant à plusieurs reprises next(), ou implicitement en utilisant les boucles for...in et for each de JavaScript.

Des itérateurs simples pour itérer sur des objets et des tableaux peuvent être créés à l'aide d'Iterator() :

Copier le code Le code est le suivant :

var lang = { nom : 'JavaScript', année de naissance : 1995 };
var it = Itérateur(lang);

Une fois l'initialisation terminée, la méthode next() peut être appelée pour accéder aux paires clé-valeur de l'objet dans l'ordre :

Copier le code Le code est le suivant :

var pair = it.next(); //La paire clé-valeur est ["name", "JavaScript"]
pair = it.next(); //La paire clé-valeur est ["anniversaire", 1995]
pair = it.next(); //Une exception `StopIteration` est levée

La boucle for…in peut être utilisée au lieu d’appeler explicitement la méthode next(). La boucle se termine automatiquement lorsque l'exception StopIteration est levée.

Copier le code Le code est le suivant :

var it = Itérateur(lang);
pour (var paire dedans)
Print(pair); //Sortie d'une paire clé-valeur [clé, valeur] à chaque fois

Si vous souhaitez uniquement itérer la valeur clé de l'objet, vous pouvez passer le deuxième paramètre à la fonction Iterator() avec la valeur true :

Copier le code Le code est le suivant :

var it = Itérateur(lang, true);
pour (clé var dedans)
Print(key); //Valeur de la clé de sortie à chaque fois

L'un des avantages de l'utilisation d'Iterator() pour accéder aux objets est que les propriétés personnalisées ajoutées à Object.prototype ne seront pas incluses dans l'objet séquence.

Iterator() peut également être utilisé sur des tableaux :

Copier le code Le code est le suivant :

var langs = ['JavaScript', 'Python', 'Haskell'];
var it = Itérateur(langs);
pour (var paire dedans)
​​​ print(pair); //Chaque itération génère une paire clé-valeur [index, langue]

Tout comme pour parcourir un objet, passer true comme deuxième paramètre fera que le parcours sera l'index du tableau :

Copier le code Le code est le suivant :

var langs = ['JavaScript', 'Python', 'Haskell'];
var it = Itérateur(langs, true);
pour (var i dedans)
​​​ print(i); //Sortie 0, puis 1, puis 2

Utilisez le mot-clé let pour attribuer des index et des valeurs pour bloquer les variables à l'intérieur de la boucle, et vous pouvez également utiliser l'affectation de déstructuration :

Copier le code Le code est le suivant :

var langs = ['JavaScript', 'Python', 'Haskell'];
var it = Itérateurs(langs);
pour (laissez [i, lang] dedans)
          print(i ': ' lang); //Sortie "0 : JavaScript" etc.

Déclarer un itérateur personnalisé

Certains objets représentant une collection d'éléments doivent être itérés d'une manière spécifiée.

1. Itérer un objet représentant une plage doit renvoyer les nombres contenus dans la plage un par un
2. Les nœuds feuilles d'un arbre sont accessibles en utilisant la profondeur d'abord ou la largeur d'abord
3. L'itération sur un objet représentant les résultats d'une requête de base de données doit être renvoyée ligne par ligne, même si l'ensemble des résultats n'a pas encore été chargé dans un seul tableau
4. Un itérateur agissant sur une séquence mathématique infinie (comme la séquence de Fibonacci) doit renvoyer les résultats les uns après les autres sans créer de structure de données de longueur infinie

JavaScript vous permet d'écrire une logique d'itération personnalisée et de l'appliquer à un objet

Nous créons un simple objet Range contenant des valeurs basses et hautes :

Copier le code Le code est le suivant :

fonction Plage (basse, haute){
This.low = faible;
This.high = élevé;
>

Maintenant, nous créons un itérateur personnalisé qui renvoie une séquence contenant tous les entiers de la plage. L'interface de l'itérateur nous oblige à fournir une méthode next() pour renvoyer l'élément suivant de la séquence ou lever une exception StopIteration.

Copier le code Le code est le suivant :

fonction RangeIterator(plage){
This.range = plage;
This.current = this.range.low;
>
RangeIterator.prototype.next = fonction(){
Si (this.current > this.range.high)
          lancer StopIteration ;
       autre
          renvoie this.current ;
};

Notre RangeIterator est instancié avec une instance de plage et maintient une propriété actuelle pour suivre la position actuelle de la séquence.

Enfin, pour que RangeIterator soit combiné avec Range, nous devons ajouter une méthode __iterator__ spéciale pour Range. Il sera appelé lorsque nous essaierons de parcourir un Range et devra renvoyer une instance RangeIterator qui implémente la logique d'itération.

Copier le code Le code est le suivant :

Range.prototype.__iterator__ = function(){
        renvoie le nouveau RangeIterator(this);
};

Une fois que nous avons terminé notre itérateur personnalisé, nous pouvons parcourir une instance de plage :

Copier le code Le code est le suivant :

var range = new Range(3, 5);
pour (var i dans la plage)
​​​ print(i); //Sortie 3, puis 4, puis 5

Générateurs : une meilleure façon de créer des itérateurs

Bien que les itérateurs personnalisés soient un outil utile, une planification minutieuse est nécessaire lors de leur création car leur état interne doit être maintenu explicitement.

Le générateur fournit des fonctions très puissantes : il vous permet de définir une fonction qui contient son propre algorithme d'itération, et il peut automatiquement maintenir son propre état.

Les générateurs sont des fonctions spéciales qui peuvent servir d'usines d'itérateurs. Si une fonction contient une ou plusieurs expressions de rendement, elle est appelée générateur (Note du traducteur : Node.js doit également ajouter * devant le nom de la fonction pour l'indiquer).

Remarque : seuls les blocs de code contenus dans

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment mettre en œuvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Comment mettre en œuvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Dec 17, 2023 pm 02:54 PM

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de reconnaissance vocale en ligne Introduction : Avec le développement continu de la technologie, la technologie de reconnaissance vocale est devenue une partie importante du domaine de l'intelligence artificielle. Le système de reconnaissance vocale en ligne basé sur WebSocket et JavaScript présente les caractéristiques d'une faible latence, d'un temps réel et d'une multiplateforme, et est devenu une solution largement utilisée. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de reconnaissance vocale en ligne.

WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel Dec 17, 2023 pm 05:30 PM

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en œuvre en détail. 1. Technologie WebSocket

Comment utiliser JavaScript et WebSocket pour mettre en œuvre un système de commande en ligne en temps réel Comment utiliser JavaScript et WebSocket pour mettre en œuvre un système de commande en ligne en temps réel Dec 17, 2023 pm 12:09 PM

Introduction à l'utilisation de JavaScript et de WebSocket pour mettre en œuvre un système de commande en ligne en temps réel : avec la popularité d'Internet et les progrès de la technologie, de plus en plus de restaurants ont commencé à proposer des services de commande en ligne. Afin de mettre en œuvre un système de commande en ligne en temps réel, nous pouvons utiliser les technologies JavaScript et WebSocket. WebSocket est un protocole de communication full-duplex basé sur le protocole TCP, qui peut réaliser une communication bidirectionnelle en temps réel entre le client et le serveur. Dans le système de commande en ligne en temps réel, lorsque l'utilisateur sélectionne des plats et passe une commande

Comment mettre en œuvre un système de réservation en ligne à l'aide de WebSocket et JavaScript Comment mettre en œuvre un système de réservation en ligne à l'aide de WebSocket et JavaScript Dec 17, 2023 am 09:39 AM

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de réservation en ligne. À l'ère numérique d'aujourd'hui, de plus en plus d'entreprises et de services doivent fournir des fonctions de réservation en ligne. Il est crucial de mettre en place un système de réservation en ligne efficace et en temps réel. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de réservation en ligne et fournit des exemples de code spécifiques. 1. Qu'est-ce que WebSocket ? WebSocket est une méthode full-duplex sur une seule connexion TCP.

JavaScript et WebSocket : créer un système efficace de prévisions météorologiques en temps réel JavaScript et WebSocket : créer un système efficace de prévisions météorologiques en temps réel Dec 17, 2023 pm 05:13 PM

JavaScript et WebSocket : Construire un système efficace de prévisions météorologiques en temps réel Introduction : Aujourd'hui, la précision des prévisions météorologiques revêt une grande importance pour la vie quotidienne et la prise de décision. À mesure que la technologie évolue, nous pouvons fournir des prévisions météorologiques plus précises et plus fiables en obtenant des données météorologiques en temps réel. Dans cet article, nous apprendrons comment utiliser la technologie JavaScript et WebSocket pour créer un système efficace de prévisions météorologiques en temps réel. Cet article démontrera le processus de mise en œuvre à travers des exemples de code spécifiques. Nous

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Meilleur générateur d'art d'animation IA gratuit Meilleur générateur d'art d'animation IA gratuit Feb 19, 2024 pm 10:50 PM

Si vous êtes impatient de trouver le meilleur générateur gratuit d'art d'animation IA, vous pouvez mettre fin à votre recherche. Le monde de l’art anime captive le public depuis des décennies avec ses personnages uniques, ses couleurs captivantes et ses intrigues captivantes. Cependant, créer de l’art anime nécessite du talent, des compétences et beaucoup de temps. Cependant, avec le développement continu de l'intelligence artificielle (IA), vous pouvez désormais explorer le monde de l'art d'animation sans avoir à vous plonger dans des technologies complexes à l'aide du meilleur générateur d'art d'animation IA gratuit. Cela vous ouvrira de nouvelles possibilités pour libérer votre créativité. Qu'est-ce qu'un générateur d'art anime IA ? L'AI Animation Art Generator utilise des algorithmes sophistiqués et des techniques d'apprentissage automatique pour analyser une vaste base de données d'œuvres d'animation. Grâce à ces algorithmes, le système apprend et identifie différents styles d'animation

Explication détaillée de la mise en œuvre et de l'utilisation de l'itérateur Golang Explication détaillée de la mise en œuvre et de l'utilisation de l'itérateur Golang Mar 17, 2024 pm 09:21 PM

Golang est un langage compilé statiquement rapide et efficace. Sa syntaxe concise et ses performances puissantes le rendent très populaire dans le domaine du développement logiciel. Dans Golang, l'itérateur (Iterator) est un modèle de conception couramment utilisé pour parcourir les éléments d'une collection sans exposer la structure interne de la collection. Cet article présentera en détail comment implémenter et utiliser les itérateurs dans Golang, et aidera les lecteurs à mieux comprendre grâce à des exemples de code spécifiques. 1. Définition de l'itérateur Dans Golang, l'itérateur se compose généralement d'une interface et d'une implémentation

See all articles