Aplatir les structures de données imbriquées avec les itérateurs JavaScript

Beginner

This tutorial is from open-source community. Access the source code

Introduction

Dans ce laboratoire, nous allons explorer le concept d'itérateurs et de générateurs en JavaScript. Plus précisément, nous allons nous concentrer sur la création d'un itérateur plat qui peut itérer sur des tableaux et des ensembles imbriqués, et les aplatir en un seul itérable. Cela nous permettra d'accéder et de manipuler efficacement des structures de données imbriquées de manière plus fluide. À la fin du laboratoire, vous aurez une compréhension plus approfondie de la manière dont les générateurs et les itérateurs fonctionnent, et de la manière dont ils peuvent être appliqués pour résoudre des problèmes du monde réel.

Explications sur l'itérateur plat

Pour créer un générateur qui itère sur un itérable et aplatit les itérables imbriqués, suivez ces étapes :

  1. Ouvrez le Terminal/SSH et tapez node pour commencer à pratiquer la programmation.
  2. Utilisez la récursivité dans la fonction génératrice.
  3. Utilisez une boucle for...of pour itérer sur les valeurs de l'itérateur donné.
  4. Utilisez Symbol.iterator pour vérifier si chaque valeur est un itérable.
  5. Si c'est le cas, utilisez l'expression yield* pour déléguer de manière récursive à la même fonction génératrice.
  6. Sinon, yield la valeur actuelle.

Voici un extrait de code d'exemple :

const flatIterator = function* (itr) {
  for (let item of itr) {
    if (item[Symbol.iterator]) yield* flatIterator(item);
    else yield item;
  }
};

const arr = [1, 2, [3, 4], [5, [6, [7], 8]], 9, new Set([10, 11])];
[...flatIterator(arr)]; // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11

Dans l'exemple, arr est un tableau de valeurs, y compris des tableaux imbriqués et un ensemble. La fonction génératrice flatIterator est utilisée pour aplatir ces valeurs imbriquées et renvoyer un tableau aplati.

Sommaire

Félicitations ! Vous avez terminé le laboratoire sur l'itérateur plat. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.