El método Reduce
Parte de la sección Lógica y Flujo del Journey de JavaScript de Coddy — lección 54 de 65.
El método reduce() te permite "reducir" un array a un único valor ejecutando una función proporcionada para cada elemento del array. Este valor único puede ser un número, una cadena, un objeto o incluso otro array.
Aquí está la sintaxis del reducer:
array.reduce(function(accumulator, currentValue, currentIndex, array) {
// devuelve el valor actualizado del acumulador
}, initialValue);Componentes clave:
- accumulator: Acumula los valores de retorno de la función de rellamada (callback) (piensa en ello como el total acumulado)
- currentValue: El elemento actual que se está procesando en el array
- currentIndex: (opcional) El índice del elemento actual
- array: (opcional) El array sobre el cual se llamó a reduce()
- initialValue: (opcional) Un valor que se utilizará como el primer argumento en la primera llamada de la función callback
Por ejemplo - suma de números:
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log(sum); // 15Cómo funciona paso a paso:
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, curr) => {
console.log(`Accumulator: ${acc}, Current Value: ${curr}`);
return acc + curr;
}, 0);
// Output:
// Accumulator: 0, Current Value: 1
// Accumulator: 1, Current Value: 2
// Accumulator: 3, Current Value: 3
// Accumulator: 6, Current Value: 4
// Final result: 10Desafío
FácilCrea una función llamada calculateGroceryTotal que reciba un array de objetos que representan artículos de la compra.
Cada objeto tiene dos propiedades:
name: string (nombre del artículo)price: number (precio del artículo)
La función debe:
- Calcular el coste total de todos los artículos
- Aplicar un descuento: - Si el total es superior a 100, aplicar un 10% de descuento
- Si el total es superior a 50 pero inferior o igual a 100, aplicar un 5% de descuento
- Sin descuento para totales de 50 o menos.
Devolver un objeto que contenga:
originalTotal: la suma antes del descuentodiscount: la cantidad ahorradafinalTotal: la cantidad final después del descuento
Hoja de referencia
El método reduce() reduce un array a un único valor ejecutando una función para cada elemento:
array.reduce(function(accumulator, currentValue, currentIndex, array) {
// devuelve el valor del acumulador actualizado
}, initialValue);Componentes clave:
- accumulator: Acumula los valores de retorno de la función callback (total acumulado)
- currentValue: El elemento actual que se está procesando
- currentIndex: (opcional) El índice del elemento actual
- array: (opcional) El array sobre el cual se llamó a reduce()
- initialValue: (opcional) Valor inicial para el acumulador
Ejemplo - suma de números:
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log(sum); // 15Ejecución paso a paso:
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, curr) => {
console.log(`Accumulator: ${acc}, Current Value: ${curr}`);
return acc + curr;
}, 0);
// Salida:
// Accumulator: 0, Current Value: 1
// Accumulator: 1, Current Value: 2
// Accumulator: 3, Current Value: 3
// Accumulator: 6, Current Value: 4
// Resultado final: 10Pruébalo tú mismo
function calculateGroceryTotal(items) {
// Escribe el código aquí
return {
originalTotal: Math.round(originalTotal * 100) / 100, // Redondear a 2 decimales
discount: Math.round(discount * 100) / 100,
finalTotal: Math.round(finalTotal * 100) / 100
};
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Strings en profundidad
Fundamentos de stringsIterar sobre stringsTemplate LiteralsMétodos de stringsResumen - String Weaver4JSON Parte 2
Iterar sobre JSONJSON anidadoEncadenamiento opcional en JSONCopia superficial y profundaResumen - Tienda de bicicletasResumen - Sistema solar7Sistema de Gestión de Biblioteca
Descripción general del proyectoAñadir libros10Gestionar el sistema del festival
Descripción general del proyectoAñadir películas y sedes2Arreglos multidimensionales
Conceptos básicos de arreglos 2DAcceso a elementos de arreglos 2DBucles anidados con arreglos 2DResumen - Arreglos 2DSuma y resta de matricesArreglos irregulares (Jagged Arrays)Arreglos 3D y más alláPatrones comunes en arreglos 2DResumen - Todo sobre arreglos5Conjuntos Parte 1
¿Qué es un conjunto?Iterar sobre conjuntosAñadir un elementoEliminar un elementoComprobar si un elemento existeTamaño y Is EmptyCopy y ClearResumen - Conceptos básicos de conjuntos8Temas interesantes de Arrays
Desestructuración de ArraysSintaxis Spread en ArraysArrays dispersosResumen - Taller de Arrays3JSON Parte 1
¿Qué es un JSON?Comprobar si existe una claveMétodos de objetoEl Spread Operator Parte 1El Spread Operator Parte 2Eliminar clavesResumen - Manipular claves de JSON