Lektionen des Moduls (2/4)
for…of und for…in
JavaScript hat zwei „ergonomische“ Schleifen, die man nicht verwechseln sollte:
for…ofiteriert über die Werte einer iterierbaren Kollektion (Array, String, Set, Map...).for…initeriert über die enumerierbaren Schlüssel (Keys) eines Objekts.
Sie sind eng verwandt und werden leicht verwechselt — die falsche Schleife zu wählen, ist eine der ersten Fallen der Sprache.
for…of für Arrays und Strings
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'
}Es gibt dir nicht den Index. Wenn du den Index ebenfalls benötigst, verwende entries():
for (const [i, c] of colori.entries()) {
console.log(i, c); // 0 rosso, 1 verde, 2 blu
}for…in für Objekte
const utente = { nome: 'Anna', eta: 30, citta: 'Roma' };
for (const chiave in utente) {
console.log(chiave, utente[chiave]); // 'nome' 'Anna', ...
}Wann du sie NICHT verwechseln darfst
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'
}Probier es aus
Definiere `concat(words)`, das für eine gegebene Liste von Strings einen einzigen String zurückgibt, in dem alle Strings mit einem Leerzeichen getrennt aneinandergehängt sind. Verwende for…of.
Hinweis anzeigen
Akkumuliere in einem String; füge das Leerzeichen nur hinzu, wenn es nicht das erste Wort ist.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Definiere `positiveValues(obj)`, das ein Array mit den Werten des Objekts zurückgibt, die Zahlen > 0 sind. Verwende for…in. Die Reihenfolge muss der Iterationsreihenfolge der Schlüssel entsprechen.
Hinweis anzeigen
Schleife mit for...in über die Schlüssel, filtere mit typeof und > 0, und pushe die Werte in die Ergebnisse.
Lösung nach 3 Versuchen verfügbar