Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvida sobre reduce()

Olá,

Estava fazendo alguns teste com reduce() e fiquei com a seguinte duvida, poque quando estou tentando somar os valores de um array de objetos tenho que passar o valor inicial de total e quando utilizo um array "simples" não?

Pra ficar mais claro, segue os testes:

1) Array

  var total = [0, 1, 2, 3].reduce((a, b) => a + b);
  console.log(total);

 //6

2)Array de objetos

let usuarios = [

    {nome: 'User 1', email: 'user1@gmail.com', idade: 24, gasto: 50},
    {nome: 'User 2', email: 'user2@gmail.com', idade: 21, gasto: 60},
    {nome: 'User 3', email: 'user3@gmail.com', idade: 24, gasto: 70}
];

let totalGastoUsuario = usuarios.reduce((total, usuario) => total + usuario.gasto, 0.0);
console.log(totalGastoUsuario);

//180

3)Array de objetos sem o valor inicial do total

let usuarios = [

    {nome: 'User 1', email: 'user1@gmail.com', idade: 24, gasto: 50},
    {nome: 'User 2', email: 'user2@gmail.com', idade: 21, gasto: 60},
    {nome: 'User 3', email: 'user3@gmail.com', idade: 24, gasto: 70}
];

let totalGastoUsuario = usuarios.reduce((total, usuario) => total + usuario.gasto);
console.log(totalGastoUsuario);
//[object Object]6070

Aparentemente ele concatena tudo (apesar dele ignorar o primeiro valor), mas estranho que quando utilizo um array somente com números ele soma tudo corretamente, isso ocorre justamente porque estou lidando com objetos?

Agradeço atenção desde ja!

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
2 respostas
solução!

Oi Luiz, quando você não passa o valor inicial como argumento, ele utiliza o que estiver na primeira posição do seu array, que nesse caso é um objeto. E aí rola o problema, porque ele tenta somar o objeto com um número na primeira passagem :(.

ahh entendi, muuito obrigado Alberto!