🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Esercizi Iteratori JavaScript

Codegrind Team•Jul 12 2024

Ecco degli esercizi con soluzione per praticare l’uso degli iteratori in JavaScript.

Esercizio 1: Iteratore Semplice

Creare un iteratore semplice che iteri su un array di numeri.
const numeri = [1, 2, 3, 4, 5];

const iteratore = numeri[Symbol.iterator]();

console.log(iteratore.next().value); // 1
console.log(iteratore.next().value); // 2
console.log(iteratore.next().value); // 3
console.log(iteratore.next().value); // 4
console.log(iteratore.next().value); // 5
console.log(iteratore.next().done); // true

Esercizio 2: Iteratore Personalizzato

Creare un iteratore personalizzato per un oggetto.
const oggetto = {
  valore1: "A",
  valore2: "B",
  valore3: "C",
  [Symbol.iterator]: function () {
    const valori = Object.values(this);
    let indice = 0;
    return {
      next: function () {
        if (indice < valori.length) {
          return { value: valori[indice++], done: false };
        } else {
          return { done: true };
        }
      },
    };
  },
};

const iteratore = oggetto[Symbol.iterator]();

console.log(iteratore.next().value); // A
console.log(iteratore.next().value); // B
console.log(iteratore.next().value); // C
console.log(iteratore.next().done); // true

Esercizio 3: Iterare su una Stringa

Utilizzare un iteratore per iterare su ogni carattere di una stringa.
const stringa = "Hello";

const iteratore = stringa[Symbol.iterator]();

console.log(iteratore.next().value); // H
console.log(iteratore.next().value); // e
console.log(iteratore.next().value); // l
console.log(iteratore.next().value); // l
console.log(iteratore.next().value); // o
console.log(iteratore.next().done); // true

Esercizio 4: Iteratore di un Oggetto con Chiavi e Valori

Creare un iteratore per un oggetto che restituisca chiavi e valori.
const oggetto = {
  nome: "Mario",
  eta: 30,
  cittĂ : "Roma",
  [Symbol.iterator]: function () {
    const chiavi = Object.keys(this);
    let indice = 0;
    return {
      next: () => {
        if (indice < chiavi.length) {
          const chiave = chiavi[indice++];
          return { value: [chiave, this[chiave]], done: false };
        } else {
          return { done: true };
        }
      },
    };
  },
};

const iteratore = oggetto[Symbol.iterator]();

console.log(iteratore.next().value); // ["nome", "Mario"]
console.log(iteratore.next().value); // ["eta", 30]
console.log(iteratore.next().value); // ["cittĂ ", "Roma"]
console.log(iteratore.next().done); // true

Esercizio 5: Iteratore per una Collezione di Oggetti

Creare un iteratore per una collezione di oggetti che restituisca uno alla volta.
const collezione = {
  oggetti: [{ id: 1 }, { id: 2 }, { id: 3 }],
  [Symbol.iterator]: function () {
    let indice = 0;
    return {
      next: () => {
        if (indice < this.oggetti.length) {
          return { value: this.oggetti[indice++], done: false };
        } else {
          return { done: true };
        }
      },
    };
  },
};

const iteratore = collezione[Symbol.iterator]();

console.log(iteratore.next().value); // { id: 1 }
console.log(iteratore.next().value); // { id: 2 }
console.log(iteratore.next().value); // { id: 3 }
console.log(iteratore.next().done); // true

Esercizio 6: Iteratore Infinito

Creare un iteratore infinito che generi numeri interi consecutivi.
const iteratoreInfinito = {
  [Symbol.iterator]: function () {
    let numero = 0;
    return {
      next: () => {
        return { value: numero++, done: false };
      },
    };
  },
};

const iteratore = iteratoreInfinito[Symbol.iterator]();

console.log(iteratore.next().value); // 0
console.log(iteratore.next().value); // 1
console.log(iteratore.next().value); // 2
console.log(iteratore.next().value); // 3
// e così via...

Esercizio 7: Iteratore di Fibonacci

Creare un iteratore che generi la sequenza di Fibonacci.
const fibonacci = {
  [Symbol.iterator]: function () {
    let [a, b] = [0, 1];
    return {
      next: () => {
        [a, b] = [b, a + b];
        return { value: a, done: false };
      },
    };
  },
};

const iteratore = fibonacci[Symbol.iterator]();

console.log(iteratore.next().value); // 1
console.log(iteratore.next().value); // 1
console.log(iteratore.next().value); // 2
console.log(iteratore.next().value); // 3
console.log(iteratore.next().value); // 5

Esercizio 8: Iteratore Bidirezionale

Creare un iteratore bidirezionale che possa iterare avanti e indietro su un array.
class IteratoreBidirezionale {
  constructor(array) {
    this.array = array;
    this.indice = 0;
  }

  [Symbol.iterator]() {
    return this;
  }

  next() {
    if (this.indice < this.array.length) {
      return { value: this.array[this.indice++], done: false };
    } else {
      return { done: true };
    }
  }

  previous() {
    if (this.indice > 0) {
      return { value: this.array[--this.indice], done: false };
    } else {
      return { done: true };
    }
  }
}

const array = [1, 2, 3, 4, 5];
const iteratore = new IteratoreBidirezionale(array);

console.log(iteratore.next().value); // 1
console.log(iteratore.next().value); // 2
console.log(iteratore.previous().value); // 2
console.log(iteratore.previous().value); // 1
console.log(iteratore.next().value); // 2