CodeForge

JavaScript de Cero a Experto / Arrays

reduce: acumular una lista en un valor

Teoría22 min20 XP

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.