4-valores duplicados en un arreglo-Lo que sucede con frecuencia-Resumen de la función completa-El Conteo de Asistencias
Lo que sucede con frecuencia = {1: 1, 2: 2, 3: 3}:
Paso a paso:
1. const resultado = [] - Crea array vacío
2. for (let num in frecuencia) - Itera sobre las claves:
Iteración 1:
num = "1"
frecuencia["1"] → 1 1 === 2? → FALSO // No hace nada, resultado sigue: []
Iteración 2: num = "2"
frecuencia["2"] → 2 2 === 2? → VERDADERO resultado.push(Number("2")) → resultado = [2]
Iteración 3: num = "3"
frecuencia["3"] → 3 3 === 2? → FALSO // No hace nada, resultado sigue: [2]
3. return resultado - Retorna [2]
¿Para qué sirve este código?
Propósito: Encontrar qué números aparecen exactamente 2 veces en el array original.
Ejemplo completo:
Si el array original era: [1, 2, 2, 3, 3, 3]
Después de contar frecuencias:
frecuencia = { 1: 1, // El 1 aparece 1 vez 2: 2, // El 2 aparece 2 veces ← ESTE NOS INTERESA 3: 3 // El 3 aparece 3 veces }
Después del filtro:
resultado = [2] // Solo el número 2 aparece exactamente 2 veces
¿Qué entregaría al final?
console.log(encontrarDuplicadosExactos([1, 2, 2, 3, 3, 3])); // Output: [2]
Otro ejemplo:
Array: [4, 4, 5, 5, 6]
frecuencia = {4: 2, 5: 2, 6: 1} resultado = [4, 5] // Ambos aparecen 2 veces
En resumen: Este código filtra y devuelve un array con los números (no las frecuencias) que aparecen exactamente 2 veces en el array original.
Resumen de la función completa:
Primer ciclo: Contar frecuencias
for (let num of arr) { frecuencia.set(num, (frecuencia.get(num) || 0) + 1); }
Propósito: Construir un "diccionario" que nos dice cuántas veces aparece cada número.
Ejemplo con [1, 2, 2, 3]:
Después del primer ciclo:
frecuencia = {
1: 1,
2: 2,
3: 1
}Segundo ciclo: Filtrar resultados
for (let num in frecuencia) { if (frecuencia[num] === 2) { resultado.push(Number(num)); } }
Propósito: Revisar el diccionario y extraer solo los números que cumplen la condición (aparecen exactamente 2 veces).
En nuestro ejemplo:
Revisa
1: 1→ ❌ No cumple (no es 2)Revisa
2: 2→ ✅ Cumple (es exactamente 2) → Agrega el número 2 al resultadoRevisa
3: 1→ ❌ No cumple (no es 2)
Resultado final: [2]
La lógica en dos pasos:
¿Qué números hay y cuántas veces aparecen? (Primer ciclo)
De esos números, ¿cuáles aparecen exactamente 2 veces? (Segundo ciclo)
Analogía:
Es como:
Contar cuántas veces llegó cada estudiante a clase
Filtrar solo los que llegaron exactamente 2 veces
ghjhg
: El Conteo de Asistencias
Problema: En un salón de clases, queremos saber qué estudiantes vinieron exactamente 2 días esta semana.
PASO 1: CONTAR ASISTENCIAS (Primer ciclo)
Pseudocódigo:
PARA CADA estudiante en la lista de asistentes:
SI el estudiante es NUEVO en mi registro:
Anotar que ha venido 1 vez
SI NO:
Sumar 1 a sus asistencias actualesEjemplo con estudiantes: [Ana, Luis, Ana, Carlos, Luis]
Proceso:
Ana → Nueva → Registrar: Ana: 1
Luis → Nuevo → Registrar: Luis: 1
Ana → Ya existe → Ana: 1 + 1 = 2
Carlos → Nuevo → Registrar: Carlos: 1
Luis → Ya existe → Luis: 1 + 1 = 2
Registro final:
Ana: 2 asistencias Luis: 2 asistencias Carlos: 1 asistencia
PASO 2: FILTRAR RESULTADOS (Segundo ciclo)
Pseudocódigo:
CREAR lista vacía para resultados
PARA CADA estudiante en mi registro:
SI sus asistencias son EXACTAMENTE 2:
AGREGAR estudiante a la lista de resultados
DEVOLVER lista de resultadosProceso:
Ana: 2 asistencias → ✅ Cumple → Agregar Ana
Luis: 2 asistencias → ✅ Cumple → Agregar Luis
Carlos: 1 asistencia → ❌ No cumple → Saltar
Resultado final: [Ana, Luis]
RESUMEN DE LA LÓGICA:
FASE DE CONTEO: "¿Cuántas veces apareció cada elemento?"
FASE DE FILTRO: "De todos los elementos, ¿cuáles aparecieron exactamente 2 veces?"
EN TU EJEMPLO ORIGINAL:
Array: [1, 2, 2]
Fase 1: Contar → {1: 1 vez, 2: 2 veces}
Fase 2: Filtrar → Solo el 2 tiene exactamente 2 apariciones
Resultado: [2]
¡La clave está en separar el CONTEO del FILTRADO!
************************
Comentarios
Publicar un comentario