El método reduce
aplica una función a un acumulador y a cada valor de un array (de izquierda a derecha) para reducirlo a un solo valor. La función de reducción se pasa como argumento a reduce y se invoca en cada iteración del array.
Este método no modifica el array original, lo cual es buena práctica para mantener la inmutabilidad en tu código.
🔸 callback
: La función de reducción que se aplica a cada elemento del array.
🔸 initialValue
: El valor inicial del acumulador.
La función de reducción se llama "callback" porque es una función que se pasa como argumento a otra función (en este caso, el método reduce) y se invoca ("llama de vuelta") dentro de esa función en un momento específico, después de que algún tipo de evento o acción haya tenido lugar.
En el caso de reduce, la función callback es la lógica que se aplica a cada elemento del array para reducirlo a un solo valor. Esta función se llama repetidamente, una vez por cada elemento en el array.
La función de reducción (callback) toma los siguientes parámetros:
accumulator
: El acumulador que mantiene el resultado parcial.currentValue
: El valor del elemento actual en la iteración.index
(opcional): El índice del elemento actual.array
(opcional): El array completo sobre el cual se está iterando.Podemos ver los valores de estos parámetros en cada iteración del array del ejemplo anterior en la siguiente tabla:
El valor inicial (initialValue) es crucial para determinar el punto de partida de la reducción. Cambiar este valor puede cambiar el resultado final.
Dependiendo de la operación que estés realizando, el valor inicial podría ser diferente. Por ejemplo, si estuvieras concatenando strings, podrías comenzar con una cadena vacía ('') o un prefijo; si estuvieras multiplicando números, podrías comenzar con 1.
El valor inicial del acumulador afecta directamente el resultado final de la operación de reducción. Cambiar el valor inicial de 0 a 27 del ejemplo anterior cambia el resultado final de 15 a 42 en este ejemplo. Este comportamiento es útil cuando necesitas realizar operaciones que requieren un valor inicial específico, como sumar con un desplazamiento inicial o concatenar cadenas con un prefijo.
Si no se proporciona un valor inicial a la función reduce, el primer elemento del array se utiliza como el valor inicial del acumulador. La iteración entonces comienza desde el segundo elemento del array. Esto puede simplificar el código en algunos casos, pero también puede llevar a errores si el array está vacío o si el tipo de los elementos no es adecuado para la operación que se está realizando.
Si en el ejemplo anterior no se proporciona un valor inicial, el valor inicial del acumulador sería 1 en lugar del 0 que se había especificado y el primer currentValue sería 2 en lugar de 1.
Generalmente es una buena práctica proporcionar un valor inicial para evitar errores y hacer el código más fácil de entender.
El método reduce es muy versátil y se puede utilizar para una variedad de tareas. Algunos ejemplos comunes incluyen:
🔸 Concatenar Strings:
Puedes usar reduce para concatenar un array de strings en una sola cadena.
🔸 Contar Elementos:
Si necesitas contar la cantidad de veces que aparece cada elemento en un array, reduce es muy útil.
🔸 Aplanar un Array de Arrays:
Puedes usar reduce para convertir un array de arrays en un solo array.
Esto es otra forma de hacer flatMap
:
🔸 Agrupar Objetos por una Propiedad:
Si tienes un array de objetos y quieres agruparlos por una propiedad específica, reduce puede ayudarte.
Aunque ahora la agrupación por propiedad puede hacerse de manera más sencilla con groupBy
:
🔸 Calcular la Suma de una Propiedad en Objetos:
Si tienes un array de objetos y quieres sumar los valores de una propiedad específica, reduce es útil.
El método reduce en JavaScript es extremadamente útil para transformar y acumular datos de arrays. Entender cómo funciona, cómo usar el valor inicial y cómo manejar arrays vacíos te permitirá utilizar reduce de manera más efectiva en tus proyectos. Con la práctica, encontrarás que reduce puede simplificar muchas operaciones complejas de manipulación de datos.