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:

javascript
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)

javascript
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)

javascript
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

javascript
num = 1
frecuencia[1] === undefined?SÍ
frecuencia[1] = 1
// frecuencia = {1: 1}

Iteración 2: num = 1 (segundo 1)

javascript
num = 1
frecuencia[1] === undefined?NO (ahora vale 1)
frecuencia[1] = 1 + 1 = 2
// frecuencia = {1: 2}

Iteración 3: num = 2

javascript
num = 2
frecuencia[2] === undefined?SÍ
frecuencia[2] = 1
// frecuencia = {1: 2, 2: 1}

¿Por qué siempre empieza con undefined?

javascript
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:

  • num toma los valores del array, no los índices

  • frecuencia[num] accede a la propiedad del objeto usando el valor como clave

  • Siempre empieza como undefined porque el objeto está vacío

  • Solo deja de ser undefined cuando el mismo valor aparece por segunda vez

¡Tu entendimiento del for...of era el problema! ¿Queda más claro ahora?

Comentarios

Entradas más populares de este blog

1-valores duplicados en un arreglo

n-funcion - el botón-n

Objetos básicos en JavaScript