Lecții din modul (2/4)
pentru...din și pentru...în
JavaScript are două bucle „ergonomice” care nu trebuie confundate:
for…ofrepetă valorile unei colecții iterabile (matrice, șir, set, hartă...).for…inrepetă cheile enumerabile ale unui obiect.
Sunt veri apropiați și ușor de schimbat - folosirea celui greșit este una dintre primele în limbaj capcane.
for…of pentru matrice și șiruri
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'
}Nu vă oferă indexul. Dacă aveți nevoie și de index, utilizați entries():
for (const [i, c] of colori.entries()) {
console.log(i, c); // 0 rosso, 1 verde, 2 blu
}for…in pentru obiecte
const utente = { nome: 'Anna', eta: 30, citta: 'Roma' };
for (const chiave in utente) {
console.log(chiave, utente[chiave]); // 'nome' 'Anna', ...
}Când să NU le confundăm
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'
}Încearcă
Definiți `concat(words)` care, având în vedere o listă de șiruri, returnează un șir cu toate concatenate, separate printr-un spațiu. Utilizați pentru... de.
Afișează indiciu
Acumulați într-un șir; adăugați spațiul numai dacă nu este primul cuvânt.
Soluție disponibilă după 3 încercări
Exercițiu de revizuire
Definiți `positiveValues(obj)` care returnează o matrice cu valorile obiectului care sunt numere > 0. Folosiți pentru...in. Ordinea trebuie să se potrivească cu ordinea de iterație a cheilor.
Afișează indiciu
Buclă cu for...in peste taste, filtrează cu typeof și > 0, împinge în rezultate.
Soluție disponibilă după 3 încercări