Blog / Javascript

High-order Function - Reduce

TTulio Faria 30 de jun. de 2017 2 min de leitura
High-order Function - Reduce

Hoje vamos continuar falando sobre high order functions, principalmente as que estão disponíveis nos vetores em JavaScript. Vamos falar mais especificamente do Reduce. É muito comum utilizarmos o Map junto com o Reduce, ele existe em algumas outras formas como no mongoDB que é o map.reduce, uma técnica bastante utilizada para concatenar dados de forma distribuída.

Suponhamos que nossa ideia é ter um carrinho de compras e somar esse carrinho, para isso podemos utilizar o Reduce e passamos uma função que vai ser responsável por reduzir esse vetor em um valor só.

Como fazer isso?

Primeiramente podemos fazer com uma Arrow Function:

const carrinho = [
  { id: 1, preco: 2, qtd: 2 },
  { id: 1, preco: 3, qtd: 1 }
]

carrinho.reduce()

const total = carrinho.reduce((soma, item) => item.preco + soma, 0)

console.log(total)

Perceba que dentro de item e soma retornamos como queremos somar esse valor e ela começa a soma com 0. Podemos fazer de uma forma mais interessante.

Você se lembra que o MAP transforma de um valor para outro? Então poderíamos fazer o seguinte:

const carrinho = [
  { id: 1, preco: 2, qtd: 2 },
  { id: 1, preco: 3, qtd: 1 }
]

carrinho.reduce()
const total = carrinho
  .map((item) => item.preço * item.qtd)
  .reduce((soma, subtotal) => subtotal + soma, 0)
console.log(total)

Com isso, o Map vai transformar o item em um subtotal e meu Reduce vai somar esses valores transformados. Perceba que são funções bem simples, então é bem tranquilo de testarmos essas funções.

Poderíamos, por exemplo, colocar o item em uma const e passar apenas o subtotal:

const subtotal = (item) => item.preço * item.qtd
const total = carrinho
  .map(subtotal)
  .reduce((soma, subtotal) => subtotal + soma, 0)
console.log(total)

Essa é uma forma bem fácil de se fazer em teste unitários, utilizando bastante funções puras no Map, Reduce, etc. Isso ajuda muito a aumentar a testabilidade do código e consequentemente a qualidade dele.

Confira o vídeo:

Curta o DevPleno no Facebook, inscreva-se no canal e não se esqueça de cadastrar seu e-mail para não perder as novidades. Abraço!

T
Escrito por
Tulio Faria

Mestre em Sistemas de Informação pela USP e criador do DevPleno. Iniciou sua carreira como professor com apenas 18 anos em um curso técnico, foram 11 anos em sala de aula formando desenvolvedores fullstack no sul de Minas Gerais.

JavascriptFundamentos
Compartilhar X LinkedIn
Continue lendo

Insights relacionados