Iterables en JavaScript
Le protocole des itérations permet aux objets JavaScript de définir et de personnaliser leur comportement d'itération, comme les valeurs sur lesquelles sont effectuées les boucles dans for...of.
Les tableaux sont considérés comme itérables. Cependant, il existe également d'autres itérables (par exemple, les chaînes).
Description de Symbol.iterator
Essayons de créer un itérable.
Par exemple, il existe un objet qui n'est pas un tableau mais qui peut être adapté pour for...of.
Voyons un exemple d'un objet de plage, représentant un intervalle de nombres:
let range = {
from: 0,
to: 10
};
// We want the for..of to work:
// for(let num of range) ... num=0,1,2,3,4,5,6,7,8,9,10
Pour transformer la plage en itérable, il est nécessaire d'ajouter une méthode à l'objet appelée Symbol.iterator.
Voici les étapes:
- Une fois que for..of commence, la méthode est appelée une fois. Elle doit renvoyer un itérateur.
- Ensuite, for..of peut fonctionner avec l'objet renvoyé.
- Une fois que for..of attend la valeur suivante, next() est appelé sur cet objet.
- Son résultat doit inclure la forme {done: Boolean, value: any}.
La performance complète pour la plage avec des remarques ressemblera à ceci:
La caractéristique la plus essentielle des itérables est la séparation des préoccupations. Il considère que l'objet itérateur est distinct de ceux sur lesquels il itère. Il est possible de les fusionner en utilisant la plage comme un itérateur pour simplifier le code, comme le montre l'exemple ci-dessous:
Le principal inconvénient de ce cas est qu'il n'est pas possible d'avoir deux for..of qui s'exécutent sur l'objet en même temps.
Il peut y avoir des itérateurs infinis. Par exemple, vous pouvez transformer une plage en infinie avec range.to = Infinity. Il existe également une autre option: vous pouvez créer un objet itérable qui génère une séquence infinie de nombres pseudo-aléatoires. Ainsi, aucune limitation n'est appliquée sur next, et il peut renvoyer plus de valeurs. En conséquence, la boucle for..of deviendra également sans fin sur un itérable comme celui-ci. Mais elle peut être arrêtée avec break.
Les chaînes comme itérables
Les itérables les plus couramment utilisés sont les chaînes et les tableaux.
Le for..of peut parcourir ses caractères, dans le cas d'une chaîne:
Il fonctionnera correctement, comme ceci:
Objects semblables à des tableaux et itérables
Dans ce paragraphe, nous passerons en revue les termes itérables et objets semblables à des tableaux. Ils peuvent sembler similaires mais sont très différents.
Les objets semblables à des tableaux sont des objets qui contiennent des index et une length. Les itérables sont des objets capables de mettre en œuvre la méthode Symbol.iterator. Cette méthode a été décrite ci-dessus.
En utilisant JavaScript, vous pouvez rencontrer beaucoup d'objets qui sont semblables à des tableaux et itérables. Par exemple, les chaînes peuvent être à la fois itérables et semblables à des tableaux. Par contre, un itérable ne peut jamais devenir un objet qui ressemble à un tableau, et vice versa.
Voyons un exemple d'un objet qui ressemble à un tableau mais qui n'est pas un itérable:
En général, les itérables et les objets semblables à des tableaux ne sont pas des tableaux, car ils ne contiennent pas de pop, de push, etc.
Description de Array-form
Array-form est une méthode générique utilisée pour prendre une valeur itérable ou semblable à un tableau et en faire un vrai tableau. Ensuite, les méthodes de tableau peuvent être appelées dessus. Voici un exemple d'utilisation de array-form:
Au niveau de la ligne (*), Array.from accepte l'objet, examine s'il s'agit d'un objet semblable à un tableau ou d'un itérable, puis crée un nouveau tableau, copiant tous les éléments dedans. Voyons comment cela se passe avec un itérable:
La syntaxe complète de Array.from ressemble à ceci:
Array.from(obj[, mapFunc, thisArg])
Le deuxième argument mapFn est une fonction, qui peut être attachée à chaque élément avant de l'ajouter au tableau. Le troisième argument thisArg permet de définir this pour cela. Voici un exemple:
Maintenant, transformons une chaîne en un tableau de caractères avec l'aide de Array.from:
Contrairement à la méthode str.split, cela dépend de la nature itérable de la chaîne.
Cela fonctionne de la même manière que:
Résumé
Les itérables sont des objets qui peuvent être utilisés dans le for..of.
En général, ils doivent effectuer la méthode Symbol.iterator. Cette méthode est généralement appelée automatiquement par for..of. Mais, elle peut également être appelée directement. Les objets ayant des propriétés indexées et une length sont considérés comme des objets semblables à des tableaux. Ils peuvent également inclure d'autres propriétés et méthodes, mais ils ne sont pas de véritables tableaux. Pour les transformer en tableaux, vous pouvez utiliser la méthode Array.from(obj[, mapFn, thisArg]).
Les arguments mapFn et thisArg permettent d'appliquer une fonction à chacun d'eux.
Heure du Quiz : Testez Vos Compétences!
Prêt à relever le défi de ce que vous avez appris ? Plongez dans nos quiz interactifs pour approfondir votre compréhension et renforcer vos connaissances de manière ludique.