Saltar al contenido principal
eLearner.app
Módulo 5 · Lección 2 de 418/32 en el curso~10 min
Lecciones del módulo (2/4)

for…of y for…in

JavaScript tiene dos bucles "ergonómicos" que no debes confundir:

  • for…of itera los valores de una colección iterable (array, string, Set, Map...).
  • for…in itera las claves enumerables de un objeto.

Son parientes cercanos y se confunden fácilmente; usar el incorrecto es una de las primeras trampas del lenguaje.

for…of para arrays y strings

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'
}

No te proporciona el índice. Si también necesitas el índice, usa entries():

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

for…in para objetos

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

Cuándo NO confundirlos

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'
}

Pruébalo tú mismo

Ejercicio#js.m5.l2.e1
Intentos: 0Cargando...

Define `concat(words)` que, dada una lista de cadenas, devuelva una sola cadena con todas ellas concatenadas, separadas por un espacio. Usa for…of.

Cargando editor...
Mostrar pista

Acumula en una cadena; añade el espacio solo si no es la primera palabra.

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#js.m5.l2.e2
Intentos: 0Cargando...

Define `positiveValues(obj)` que devuelva un array con los valores del objeto que sean números > 0. Usa for…in. El orden debe ser el de iteración de las claves.

Cargando editor...
Mostrar pista

Itera con for...in sobre las claves, filtra con typeof y > 0, e inserta (push) en los resultados.

Solución disponible después de 3 intentos