Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Segundo parâmetro do callback

Olá pessoal!

Minha dúvida é:

No minuto 4:46. no return tenho o seguinte calculo: "return accumulator + 1"

Por que quando nota é alterado para o número 1, o terminal retorna 9? Foi citado que retorna a quantidade de elementos do array, mas por que acontece isso? Qual a lógica?

Outro ponto é que quando alteramos "return accumulator + nota", para "return accumulator + 1", acontece isso com o segundo parâmetro:

Informação: 'nota' é declarada mas seu valor nunca é lido

Li aqui sobre o segundo parâmetro do método .reduce(), ele serve para inicializar o acumulador com um valor definido. Mas ainda não entendi a lógica, por exemplo fiz um teste aqui.

segue me código:

const salaJS = [7, 8, 8, 7, 10, 6.5, 4, 10, 7];
const salaJava = [6, 5, 8, 9, 5, 6];
const salaPython = [7, 3.5, 8, 9.5];

function calculaMedia(notasDaSala) {
  const somaDasNotas =  notasDaSala.reduce((accumulator, nota) => {
    return accumulator + 1;
  }, 0)
  console.log(somaDasNotas);
}

calculaMedia(salaJS);

Com esse código, o output no terminal é 9, mas se eu retirar o 0, que é o segundo parametro do reduce, o output é 15. Não entendi por que isso acontece, qual é o calculo feito.

1 resposta
solução!

Olá, Pedro!

Entendo que o método .reduce() pode ser um pouco confuso no início. Vamos tentar esclarecer suas dúvidas.

O método .reduce() funciona assim: ele percorre cada elemento do array e aplica a função que você passou como argumento (a função callback). Essa função recebe dois parâmetros principais: o acumulador (accumulator) e o elemento atual do array (nota, no seu caso).

O acumulador é como uma "memória" que guarda o resultado das operações feitas a cada passagem pelo array. O valor inicial desse acumulador é definido pelo segundo parâmetro que você passa para o método .reduce(). No seu caso, você passou 0 como valor inicial.

Agora, vamos ao seu código. Quando você faz "return accumulator + 1", você está dizendo para o método .reduce() somar 1 ao acumulador a cada passagem pelo array. Como o array salaJS tem 9 elementos, o resultado final será 9, pois você somou 1 ao acumulador 9 vezes.

Quando você remove o 0 (segundo parâmetro do .reduce()), o JavaScript automaticamente usa o primeiro elemento do array como valor inicial do acumulador. Então, na primeira passagem, ele já soma 1 ao primeiro elemento do array (que é 7), resultando em 8. Depois disso, ele soma 1 a cada passagem, totalizando 15 ao final (8 iniciais + 1 para cada um dos 7 elementos restantes do array).

Espero que isso tenha esclarecido suas dúvidas sobre o funcionamento do método .reduce() e o papel do acumulador e do segundo parâmetro. Se você ainda tiver dúvidas, não hesite em perguntar!

Espero ter ajudado e bons estudos!