Esercizi Iteratori JavaScript
- Esercizio 1: Iteratore Semplice
- Esercizio 2: Iteratore Personalizzato
- Esercizio 3: Iterare su una Stringa
- Esercizio 4: Iteratore di un Oggetto con Chiavi e Valori
- Esercizio 5: Iteratore per una Collezione di Oggetti
- Esercizio 6: Iteratore Infinito
- Esercizio 7: Iteratore di Fibonacci
- Esercizio 8: Iteratore Bidirezionale
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); // 1console.log(iteratore.next().value); // 2console.log(iteratore.next().value); // 3console.log(iteratore.next().value); // 4console.log(iteratore.next().value); // 5console.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); // Aconsole.log(iteratore.next().value); // Bconsole.log(iteratore.next().value); // Cconsole.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); // Hconsole.log(iteratore.next().value); // econsole.log(iteratore.next().value); // lconsole.log(iteratore.next().value); // lconsole.log(iteratore.next().value); // oconsole.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); // 0console.log(iteratore.next().value); // 1console.log(iteratore.next().value); // 2console.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); // 1console.log(iteratore.next().value); // 1console.log(iteratore.next().value); // 2console.log(iteratore.next().value); // 3console.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); // 1console.log(iteratore.next().value); // 2console.log(iteratore.previous().value); // 2console.log(iteratore.previous().value); // 1console.log(iteratore.next().value); // 2