Vai al contenuto
eLearner.app
Modulo 5 · Lezione 2 di 418/32 nel corso~10 min
Lezioni del modulo (2/4)

for…of e for…in

JavaScript ha due loop "ergonomici" da non confondere:

  • for…of itera i valori di una collezione iterabile (array, stringa, Set, Map...).
  • for…in itera le chiavi enumerabili di un oggetto.

Sono parenti stretti e si scambiano facilmente — usare quello sbagliato è una delle prime trappole del linguaggio.

for…of per array e stringhe

JS
const colori = ['rosso', 'verde', 'blu'];
for (const c of colori) {
  console.log(c); // 'rosso', 'verde', 'blu'
}

for (const ch of 'abc') {
  console.log(ch); // 'a', 'b', 'c'
}

Non ti dà l'indice. Se ti serve anche l'indice, usa entries():

JS
for (const [i, c] of colori.entries()) {
  console.log(i, c); // 0 rosso, 1 verde, 2 blu
}

for…in per oggetti

JS
const utente = { nome: 'Anna', eta: 30, citta: 'Roma' };
for (const chiave in utente) {
  console.log(chiave, utente[chiave]); // 'nome' 'Anna', ...
}

Quando NON confonderli

JS
const colori = ['rosso', 'verde', 'blu'];

// SBAGLIATO: stampa gli indici come stringhe!
for (const x in colori) {
  console.log(x); // '0', '1', '2'
}

// GIUSTO
for (const x of colori) {
  console.log(x); // 'rosso', 'verde', 'blu'
}

Prova tu

Esercizio#js.m5.l2.e1
Tentativi: 0Caricamento…

Definisci `concat(words)` che, data una lista di stringhe, restituisca una stringa con tutte concatenate, separate da uno spazio. Usa for…of.

Caricamento editor…
Mostra suggerimento

Accumula in una stringa; aggiungi lo spazio solo se non è la prima parola.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#js.m5.l2.e2
Tentativi: 0Caricamento…

Definisci `positiveValues(obj)` che restituisce un array con i valori dell'oggetto che sono numeri > 0. Usa for…in. L'ordine deve essere quello di iterazione delle chiavi.

Caricamento editor…
Mostra suggerimento

Cicla con for...in sulle chiavi, filtra con typeof e > 0, push nei risultati.

Soluzione disponibile dopo 3 tentativi