Leçons du module (2/4)
for…of et for…in
JavaScript dispose de deux boucles "ergonomiques" à ne pas confondre :
for…ofitère sur les valeurs d'une collection itérable (tableau, chaîne de caractères, Set, Map...).for…initère sur les clés énumérables d'un objet.
Elles sont très proches et s'échangent facilement — utiliser la mauvaise est l'un des premiers pièges du langage.
for…of pour les tableaux et les chaînes de caractères
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'
}Elle ne te donne pas l'index. Si tu en as aussi besoin, utilise entries() :
for (const [i, c] of colori.entries()) {
console.log(i, c); // 0 rosso, 1 verde, 2 blu
}for…in pour les objets
const utente = { nome: 'Anna', eta: 30, citta: 'Roma' };
for (const chiave in utente) {
console.log(chiave, utente[chiave]); // 'nome' 'Anna', ...
}Quand ne pas les confondre
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'
}À toi de jouer
Définis `concat(words)` qui, étant donné une liste de chaînes de caractères, renvoie une seule chaîne contenant toutes les autres concaténées, séparées par un espace. Utilise for…of.
Afficher l'indice
Accumule dans une chaîne ; ajoute l'espace uniquement s'il ne s'agit pas du premier mot.
Solution disponible après 3 tentatives
Exercice de révision
Définis `positiveValues(obj)` qui renvoie un tableau contenant les valeurs de l'objet qui sont des nombres > 0. Utilise for…in. L'ordre doit correspondre à celui de l'itération des clés.
Afficher l'indice
Boucle avec for...in sur les clés, filtre avec typeof et > 0, puis pousse (push) les valeurs dans les résultats.
Solution disponible après 3 tentatives