Modulelessen (2/4)
voor...van en voor...in
JavaScript heeft twee "ergonomische" lussen die niet moeten worden verward:
for…ofherhaalt de waarden van een itereerbare verzameling (array, string, Set, Map...).for…inherhaalt de opsombare sleutels van een object.
Ze zijn nauwe verwanten en gemakkelijk te verwisselen; het gebruik van de verkeerde taal is een van de eerste in deze taal vallen.
for…of voor arrays en 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'
}Het geeft u niet de index. Als je de index ook nodig hebt, gebruik dan entries():
for (const [i, c] of colori.entries()) {
console.log(i, c); // 0 rosso, 1 verde, 2 blu
}for…in voor objecten
const utente = { nome: 'Anna', eta: 30, citta: 'Roma' };
for (const chiave in utente) {
console.log(chiave, utente[chiave]); // 'nome' 'Anna', ...
}Wanneer je ze NIET moet verwarren
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'
}Probeer het
Definieer `concat(words)` dat, gegeven een lijst met strings, een string retourneert waarin ze allemaal aaneengeschakeld zijn, gescheiden door een spatie. Gebruik voor...van.
Toon hint
Verzamelen in een string; voeg de spatie alleen toe als dit niet het eerste woord is.
Oplossing beschikbaar na 3 pogingen
Oefening beoordelen
Definieer `positiveValues(obj)` dat een array retourneert met de waarden van het object die getallen > 0 zijn. Gebruik for…in. De volgorde moet overeenkomen met de iteratievolgorde van de sleutels.
Toon hint
Loop met for...in over de toetsen, filter met typeof en > 0, druk in de resultaten.
Oplossing beschikbaar na 3 pogingen