JavaScript de Cero a Experto / Arrays
reduce: acumular una lista en un valor
Llegó el tercer grande, el que tiene fama de difícil: reduce. Toma toda una
lista y la "reduce" a UN solo valor —un total, un promedio, un máximo, hasta
un resumen—. Da miedo por su sintaxis, pero la idea es de lo más natural:
llevar una cuenta a mano mientras recorres la lista. Vamos paso a paso; al
final lo vas a usar con confianza.
La bola de nieve
reduce paso a paso
Descompón la sintaxis: reduce recibe DOS cosas — una función y un valor
inicial (el 0 del final). La función recibe el acumulador (acum, la
bola de nieve) y el elemento actual (gasto), y debe DEVOLVER el nuevo
acumulador. Ese return se convierte en el acum de la siguiente vuelta.
Mira los logs: acum empieza en 0 y va creciendo con cada gasto hasta el
total. Eso es todo el misterio.
Los patrones que resuelve
reduce cubre suma, máximo, promedio, conteo... cualquier cosa que "colapse"
una lista en un valor. El truco siempre es el mismo: elige un valor inicial
sensato (0 para sumar, el primer elemento para el máximo) y decide cómo
COMBINAR el acumulador con cada elemento. Consejo de oro: da SIEMPRE el
valor inicial (el segundo argumento); omitirlo tiene comportamientos
confusos con listas vacías.
En gastos.reduce((acum, g) => acum + g, 0), ¿qué papel cumple el 0 del final y qué es 'acum'?
Mini-reto
En "Mi Bolsillo" con un array de gastos: calcula con reduce el total
gastado, el gasto más caro (máximo), y cuántos gastos superan tu
límite (conteo). Bonus difícil: combina el trío completo —filter los gastos
de una categoría, map para aplicarles algo, y reduce para sumarlos
(gastos.filter(...).map(...).reduce(...))—. Ese encadenamiento es el
superpoder del que hablábamos.
Qué sigue
Con map, filter, find y reduce ya manejas listas como un profesional.
La próxima lección redondea el módulo con métodos que preguntan y ordenan
—some, every, includes, sort— y con la idea de INMUTABILIDAD:
toSorted/toReversed, las versiones modernas que ordenan sin destruir el
original.