Iterator : méthode windows()
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 windows() des instances de Iterator retourne un nouvel objet d'aide à l'itérateur qui produit une fenêtre glissante d'éléments. Chaque fois que l'aide est itérée, elle produit un tableau en supprimant le premier élément de l'itération précédente et en ajoutant le prochain élément de l'itérateur original.
Pour obtenir des morceaux distincts, voir Iterator.prototype.chunks().
Syntaxe
windows(windowSize)
windows(windowSize, underSized)
Paramètres
windowSize-
Le nombre d'éléments dans la fenêtre glissante. Doit être un entier positif inférieur à 232 (la longueur maximale d'un tableau).
underSizedFacultatif-
Une chaîne de caractères définissant ce qu'il faut faire lorsque le nombre d'éléments dans l'itérateur est inférieur à
windowSizemais supérieur à 0. Il peut s'agir de l'une des valeurs suivantes :"only-full"(par défaut)-
Ignore la fenêtre partielle. L'itérateur retourné se termine immédiatement comme si l'entrée était vide.
"allow-partial"-
Rend tous les éléments de la fenêtre partielle sous forme de tableau (avec une longueur inférieure à
windowSize).
Notez que lorsque l'entrée est vide, l'itérateur retourné se termine toujours immédiatement sans produire de tableau vide.
Valeur de retour
Un nouvel objet d'aide à l'itérateur. La première fois que la méthode next() de l'aide à l'itérateur retourné est appelée, l'itérateur actuel est immédiatement avancé de windowSize éléments. Si autant d'éléments sont disponibles, ils sont produits ensemble sous forme de tableau. Sinon, le comportement dépend de l'argument underSized : l'itérateur se termine soit immédiatement sans produire quoi que ce soit (avec "only-full" ou avec une entrée complètement vide), soit un tableau de longueur inférieure à windowSize est produit.
Par la suite, à chaque fois, le tableau produit se compose du tableau précédent, de l'élément le plus à gauche supprimé, d'un nouvel élément récupéré dans l'itérable d'entrée ajouté. Lorsque l'itérable d'entrée est épuisé, l'aide à l'itérateur se termine également.
Exceptions
TypeError-
Levée si
windowSizen'est pas un entier, ou siunderSizedn'est pas l'une des valeurs autorisées. RangeError-
Levée si
windowSizeest inférieur à 1 ou supérieur à 232-1.
Exemples
>Moyenne mobile
L'exemple suivant crée un itérateur qui produit les termes de la suite de Fibonacci. Ensuite, un nouvel itérateur est créé, produisant à chaque fois la moyenne de deux éléments adjacents.
function* fibonacci() {
let current = 1;
let next = 1;
while (true) {
yield current;
[current, next] = [next, current + next];
}
}
const averaged = fibonacci()
.windows(2)
.map((window) => (window[0] + window[1]) / 2);
console.log(averaged.next().value); // 1 (1, 1)
console.log(averaged.next().value); // 1.5 (1, 2)
console.log(averaged.next().value); // 2.5 (2, 3)
console.log(averaged.next().value); // 4 (3, 5)
Ce processus, connu sous le nom de moyenne mobile, est très utile dans le traitement du signal.
Énumération des sous-chaînes de caractères
L'exemple suivant énumère toutes les sous-chaînes de caractères d'une longueur donnée dans une chaîne de caractères. La méthode windows() est utilisée pour créer une fenêtre glissante de caractères, qui sont ensuite joints pour former des sous-chaînes de caractères.
Note :
Cela est probablement beaucoup moins efficace que d'itérer manuellement un index numérique et d'appeler la méthode String.prototype.substring().
const chaine = Iterator.from("MASSACHUSETTS");
const sousChaines = chaine.windows(3).map((window) => window.join(""));
for (const sousChaine of sousChaines) {
console.log(sousChaine);
}
// MAS
// ASS
// SSA
// ...
Spécifications
| Spécification |
|---|
| Iterator Chunking> # sec-iterator.prototype.windows> |