DEV Community

Fernando Junior
Fernando Junior

Posted on

Métodos de Array - Reduce

Chegamos a mais um post da minha saga de estudos em JavaScript.

No último post eu falei sobre o método filter

No post de hoje irei falar um pouco sobre o método de array reduce.

Método Reduce

Reduce recebe uma função como argumento e executa esta função para cada item do array.

Este método é utilizado quando baseado no array original, nós precisaremos reduzir o array a um tipo de dado.

Podemos reduzir um array em um objeto literal, uma string, um número ou até mesmo um novo array.

Então, é importante entender que o reduce tem poder e versatilidade para gerar um output que não seja necessariamente um array.

Vamos começar com o exemplo mais simples para entender o reduce.

O reduce pode receber dois argumentos:

  • 1: A função que será executada
  • 2: O valor inicial do acumulador (accumulator)

A função recebida, recebe 4 parâmetros, sendo 2 obrigatórios e 2 opcionais.

Obrigatórios:

  • 1: Accumulator, que é o acumulador, que receberá os dados.
  • 2: Item, que é o item que está sendo iterado.

Opcionais:

  • 1: Index, que é o índice do item que está sendo iterado
  • 2: Array, que é o próprio array original.

Temos um array de números e queremos obter a soma de todos esses números, fazendo com que esse array seja reduzido a um único número.

const numbers = [1, 2, 3]
const sumResult = numbers.reduce((accumulator, item) => accumulator + item, 0)

console.log(sumResult) // 6
Enter fullscreen mode Exit fullscreen mode

Agora vamos imaginar uma situação mais real, imagina que temos um array com várias pontuações de jogadores e queremos obter a soma de todos os pontos de um determinado jogador.

const scores = [
  { name: 'Vinicius Costa', score: 337 },
  { name: 'Roger Melo', score: 43 },
  { name: 'Alfredo Braga', score: 234 },
  { name: 'Pedro H. Silva', score: 261 },
  { name: 'Ana Paula Rocha', score: 491 },
  { name: 'Vinicius Costa', score: 167 },
  { name: 'Roger Melo', score: 137 },
  { name: 'Alfredo Braga', score: 135 },
  { name: 'Ana Paula Rocha', score: 359 },
  { name: 'Pedro H. Silva', score: 133 }
]

const alfredoScore = scores.reduce((accumulator, score) => {
  if (scores.name === 'Alfredo Braga') {
    accumulator += scores.score
  }
  return accumulator
}, 0)

console.log(alfredoScore) // 369
Enter fullscreen mode Exit fullscreen mode

Agora vamos obter um output diferente, vamos obter uma string.

const cart = [
  { name: 'Dark Souls III', price: 95.03 },
  { name: 'Shadow of the Tomb Raider', price: 101.19 },
  { name: 'Sekiro: Shadows Die Twice', price: 179.99 },
  { name: 'Resident Evil 2', price: 119.90 },
  { name: 'Death Stranding', price: 149.99 }
]

const games = cart.reduce((accumulator, game) => {
  accumulator += `- ${game.name}\n`
  return accumulator
}, '')

console.log(games)

/*
- Dark Souls III
- Shadow of the Tomb Raider
- Sekiro: Shadows Die Twice
- Resident Evil 2
- Death Stranding
*/
Enter fullscreen mode Exit fullscreen mode

Ficamos por aqui com mais um conteúdo dos meus estudos, vou deixar o link da documentação do site da MDN sobre o método reduce.


Esse foi mais um post da minha saga de estudos em JavaScript Vanilla. Espero que estejam gostando!

Qualquer dúvida ou sugestão, vocês me encontram nas minhas redes sociais:

LinkedIn
GIthub

Top comments (0)