📢 Nuovo Corso Bootstrap Completo disponibile!

Esercizi Iteratori JavaScript

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