¿Ya dominas lo básico? Un curso estructurado de JavaScript es la vía rápida para dar el salto.
Ver cursos de JavaScript en UdemyEnlace de afiliado. No te cuesta nada extra.
- 01Preparar el entorno (lo que necesitas)
- 02Crear variables
- 03Condicionales (sentencias if)
- 04Bucles (sentencias for)
- 05Crear funciones
- 06Trabajar con arrays
- 07Trabajar con objetos
- 08Bucles (sentencias while)
- 09Trabajar con cadenas de texto
- 10Usar clases (programación orientada a objetos)
- 11Gestión de errores (try...catch)
- 12Desestructuración y sintaxis de propagación
- 13Código asíncrono (Promise / async y await)
- 14Métodos avanzados de arrays (filter y reduce)
- 15La sentencia switch
- 16El operador ternario
- 17Herencia (extender clases)
- 18Cómo escribir comentarios
- 19Operadores lógicos (AND, OR, NOT)
- 20Constantes (valores de solo lectura con const)
- 21Dividir y unir cadenas (split y join)
- 22Sintaxis segura frente a null (?? y ?.)
- 23Buscar en arrays y colecciones (includes y find)
- 24Transformar arrays con map
- 25Arrays bidimensionales (datos en forma de tabla)
- 26Crear una clase de error propia
- 27Argumentos por defecto (valores iniciales de los parámetros)
- 28Usar Set (colecciones)
- 29Verificar con assert (tu primer paso hacia las pruebas)
- 30Funciones de orden superior (pasar una función como argumento)
- 31Pilas y colas (estructuras de datos básicas)
- 32Fundamentos de la conversión de tipos
- 33Introducción a las expresiones regulares
- 34El algoritmo de búsqueda binaria
- 35Construir un cifrado César (desplazar letras)
- 36Entender cómo funciona la ordenación de burbuja
- 37Construir y mostrar fechas (año, mes y día)
- 38Escribir varias pruebas unitarias juntas (casos de prueba)
- 39Acelerar cálculos con memoización (caché)
- 40Normalizar cadenas (trim y unificar mayúsculas)
- 41La diferencia entre copia superficial y copia profunda
- 42Fundamentos de los Enum (tipos enumerados)
- 43Aplanar arrays (flatten)
- 44Invertir una cadena y detectar un palíndromo
- 45Emparejar dos arrays (una operación zip)
- 46Redondear números (floor, ceil y round)
- 47Cadenas de varias líneas (plantillas literales)
- 48Devolver varios valores desde una función (desestructurar arrays)
- 49Calcular el MCD y el MCM (algoritmo de Euclides)
- 50Dar formato a números (alinear dígitos y decimales)
- 51Lógica de limpieza con try/catch/finally
- 52Escribir funciones genéricas que no dependen del tipo
- 53Fundamentos de Map (un objeto para pares clave-valor)
- 54Generar números aleatorios
- 55Operaciones a nivel de bits (AND, OR, XOR y desplazamientos)
- 56Usar static (propiedades y métodos estáticos)
- 57Esperar un tiempo fijo (setTimeout y await)
- 58Cuidado con el error de redondeo en coma flotante
- 59Transformar y aplanar de una vez con flatMap()
- 60FizzBuzz (el ejercicio clásico)
- 61Comprobar si un número es primo
- 62Operaciones de conjuntos con Set (unión, intersección y diferencia)
- 63Convertir bases numéricas (binario y hexadecimal)
- 64Comprobar que los paréntesis casan (aplicación de pilas)
- 65Comprobar un anagrama
- 66Comprobar si un año es bisiesto
- 67Convertir temperaturas (Celsius ⇄ Fahrenheit)
- 68Calcular la descomposición en factores primos
- 69[Aplicado] Construye una lista de tareas sencilla
Métodos avanzados de arrays (filter y reduce)
En esta lección dominarás .filter() y .reduce() de los arrays para extraer los datos que cumplen una condición y agregarlos con un código breve y legible. Está dirigida a quien busca «uso de filter y reduce en JavaScript» o «agregación de arrays en JavaScript».
.filter(condición) construye un array nuevo solo con los elementos que cumplen la condición. .reduce((acumulador, elemento) => { ... }, valorInicial) es un método algo más avanzado pero utilísimo para condensar todo un array en un único valor (como una suma). Comparado con escribir el proceso elemento a elemento en un for, estos métodos hacen que «lo que intentas conseguir» aparezca directamente en el código, manteniéndolo legible.
El código de ejemplo extrae solo las notas de 70 o más de un array de notas con .filter((s) => s >= 70), y calcula el total de todas con .reduce((sum, s) => sum + s, 0). El segundo argumento de reduce (aquí, 0) es el valor de partida de la acumulación: usarías 0 para una suma, 1 para un producto, según lo que estés calculando.
Un tropiezo habitual al empezar es el orden y el papel de los argumentos de la función de .reduce(). Es fácil mezclar «el valor acumulado hasta ahora» (primer argumento) con «el elemento que se procesa» (segundo); al principio conviene ir mostrando cada paso por consola para ver cómo se comporta. Recuerda también: si olvidas el valor inicial, el primer elemento del array pasa a hacer de valor inicial.
En el desarrollo real, combinar filter y reduce es un patrón clásico de agregación de datos: extraer del historial solo los pedidos que cumplen ciertos criterios, o calcular el precio total del carrito. Es una combinación que merece la pena recordar, porque aparece constantemente en lógica real de análisis de datos y cierres de ventas.
.filter() y .reduce() también se pueden encadenar, así que puedes escribir el filtrado y la agregación en una sola línea, como scores.filter((s) => s >= 70).reduce((sum, s) => sum + s, 0).
Este tipo de agregación se combina a menudo con .map(), y en el trabajo real es muy común escribir toda una tubería de procesamiento como un único flujo: «extrae los datos que cumplen la condición, transfórmalos en justo la información que necesitas y al final súmalo todo».
💡 Todo lo que pases a console.log() aparece en la salida de abajo.
