O Método Reduce
Parte da seção Lógica & Fluxo do Journey de JavaScript da Coddy. Lição 54 de 65.
O método reduce() permite "reduzir" um array a um único valor executando uma função fornecida para cada elemento do array. Esse único valor pode ser um número, string, objeto ou até mesmo outro array.
Aqui está a sintaxe do reducer:
array.reduce(function(accumulator, currentValue, currentIndex, array) {
// retorne o valor atualizado do acumulador
}, initialValue);Componentes Principais:
- accumulator: Acumula os valores de retorno do callback (pense nele como o total acumulado)
- currentValue: O elemento atual que está sendo processado no array
- currentIndex: (opcional) O índice do elemento atual
- array: (opcional) O array sobre o qual reduce() foi chamado
- initialValue: (opcional) Um valor para usar como o primeiro argumento para a primeira chamada da função de callback
Por exemplo - soma de números:
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log(sum); // 15Como funciona passo a passo:
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, curr) => {
console.log(`Accumulator: ${acc}, Current Value: ${curr}`);
return acc + curr;
}, 0);
// Saída:
// Acumulador: 0, Valor Atual: 1
// Acumulador: 1, Valor Atual: 2
// Acumulador: 3, Valor Atual: 3
// Acumulador: 6, Valor Atual: 4
// Resultado final: 10Desafio
FácilCrie uma função chamada calculateGroceryTotal que recebe um array de objetos representando itens de supermercado.
Cada objeto possui duas propriedades:
name: string (nome do item)price: number (preço do item)
A função deve:
- Calcular o custo total de todos os itens
- Aplicar um desconto: - Se o total for acima de 100, aplicar 10% de desconto
- Se o total for acima de 50, mas menor ou igual a 100, aplicar 5% de desconto
- Nenhum desconto para totais de 50 ou menos.
Retornar um objeto contendo:
originalTotal: a soma antes do descontodiscount: o valor economizadofinalTotal: o valor final após o desconto
Experimente você mesmo
function calculateGroceryTotal(items) {
// Escreva o código aqui
return {
originalTotal: Math.round(originalTotal * 100) / 100, // Arredonde para 2 casas decimais
discount: Math.round(discount * 100) / 100,
finalTotal: Math.round(finalTotal * 100) / 100
};
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Strings em Profundidade
Fundamentos de StringsIterar sobre StringsTemplate LiteralsMétodos de StringRecapitulação - String Weaver4JSON Parte 2
Iterar sobre JSONJSON AninhadoEncadeamento Opcional em JSONCópia Rasa e ProfundaRecapitulação - Loja de BicicletasRecapitulação - Sistema Solar7Sistema de Gerenciamento de Biblioteca
Visão Geral do ProjetoAdicionando Livros10Gerenciar Sistema de Festival
Visão Geral do ProjetoAdicionar Filmes e Locais2Arrays Multidimensionais
Fundamentos de Arrays 2DAcessando Elementos de Arrays 2DLoops Aninhados com Arrays 2DRecapitulação - Arrays 2DAdição e Subtração de MatrizesArrays IrregularesArrays 3D e AlémPadrões Comuns de Arrays 2DRecapitulação - Tudo Sobre Arrays5Sets Parte 1
O que é um Set?Iterando sobre SetsAdicionando um elementoRemovendo um elementoVerificando se um elemento existeTamanho e Is EmptyCopy e ClearRecapitulação - O básico de Sets8Tópicos Interessantes sobre Arrays
Desestruturação de ArraysSintaxe Spread em ArraysArrays EsparsosRecapitulação - Workshop de Arrays3JSON Parte 1
O que é um JSON?Verificar se a Chave ExisteMétodos de ObjetoO Spread Operator Parte 1O Spread Operator Parte 2Remover ChavesRecapitulação - Manipular Chaves JSONPratique por conta própria: Compilador de JavaScript online