2-valores duplicados en un arreglo-El error clave: Índices vs Valores
La confusión está en que piensas que se usa el índice del array, pero en realidad se usa el valor del elemento.
Tu código corregido:
for (let num of arr) { if (frecuencia[num] === undefined) { frecuencia[num] = 1; } else { frecuencia[num] = frecuencia[num] + 1; } }
¿Qué hace for (let num of arr)?
NO itera por índices (0, 1, 2...)
Itera por VALORES del array
Ejemplo 1: arr = [1, 2]
Iteración 1: num = 1 (valor, no índice)
num = 1 frecuencia[1] === undefined? → SÍ (porque el objeto está vacío) frecuencia[1] = 1 // frecuencia = {1: 1}
Iteración 2: num = 2 (valor, no índice)
num = 2 frecuencia[2] === undefined? → SÍ frecuencia[2] = 1 // frecuencia = {1: 1, 2: 1}
Ejemplo 2: arr = [1, 1, 2]
Iteración 1: num = 1
num = 1 frecuencia[1] === undefined? → SÍ frecuencia[1] = 1 // frecuencia = {1: 1}
Iteración 2: num = 1 (segundo 1)
num = 1 frecuencia[1] === undefined? → NO (ahora vale 1) frecuencia[1] = 1 + 1 = 2 // frecuencia = {1: 2}
Iteración 3: num = 2
num = 2 frecuencia[2] === undefined? → SÍ frecuencia[2] = 1 // frecuencia = {1: 2, 2: 1}
¿Por qué siempre empieza con undefined?
const frecuencia = {}; // Objeto VACÍO // Cualquier propiedad que intentes acceder: frecuencia[1] // → undefined frecuencia[2] // → undefined frecuencia[100] // → undefined frecuencia["hola"] // → undefined // Solo dejará de ser undefined después de asignarle un valor: frecuencia[1] = 5; frecuencia[1] // → 5 (ya no es undefined)
En resumen:
numtoma los valores del array, no los índicesfrecuencia[num]accede a la propiedad del objeto usando el valor como claveSiempre empieza como
undefinedporque el objeto está vacíoSolo deja de ser
undefinedcuando el mismo valor aparece por segunda vez
¡Tu entendimiento del for...of era el problema! ¿Queda más claro ahora?
Comentarios
Publicar un comentario