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

Dúvida forEach

var nomes = ["Douglas", "Flávio", "Nico", "Rômulo", "Leonardo"];

for (var i = 0; i < nomes.length; i++) {
    console.log(nomes[i] + " é instrutor da Alura");
}


nomes.forEach(function(nome) {
    console.log(nome + " é instrutor da Alura");
})

Olá!

No loop for consigo visualizar como ele faz para pegar cada item do array. Porém no forEach não. Como ele consegue pegar cada item, apenas informando um argumento dentro da função e chamando o mesmo dentro dela?!

4 respostas

Olá, Renato!

A raiz da questão é como passar funções como parâmetro!

A gente pode ver como isso foi criado tentando fazer uma função nossa.

Vamos chamá-la de paraCada, uma tradução do forEach. :D

Essa função vai se genérica e será responsável percorrer um array qualquer, "encapsulando" o for e a variável i:

function paraCada(array) {
   for (var i = 0; i < array.length; i++) {    
        var elemento = array[i];
       //aqui eu faço algo!
   }
}

A questão é, se eu quero que a função paraCada seja genérica, o que eu coloco ali no meio do for?

Aí que entra uma questão muito bonita do JS: você pode por funções em variáveis e até passá-las como parâmetro!

Então, posso receber um parâmetro chamado `outraFuncao, por exemplo, e invocar essa outra função, passando o elemento do array:

function paraCada(array, outraFuncao) {
   for (var i = 0; i < array.length; i++) {
        var elemento = array[i];
       //aqui eu faço algo!
       outraFuncao(elemento);
   }
}

Na hora de usar o paraCada, como é que eu faço? Assim, ó:

var nomes = ["Douglas", "Flávio", "Nico", "Rômulo", "Leonardo"];

paraCada(nomes, function(nome) {
    console.log(nome + " é instrutor da Alura");
});

Chamei a função paraCada, que é responsável por fazer o for, e passei uma função como parâmetro que faz o console.log.

Posso percorrer outros arrays e fazer outras coisas:

var numeros = [10, 20, 30];
var soma  = 0;
paraCada(numeros, function(numero) {
    soma += numero;
});
console.log(soma);

Vai imprimir 60.


function paraCada(array, outraFuncao) {
   for (var i = 0; i < array.length; i++) {
        var elemento = array[i];
       //aqui eu faço algo!
       outraFuncao(elemento);
   }
}

Desculpa a demora, estava tentando entender a logica. Então, dentro do forEach há uma função semelhante a outraFuncao(elemento) que também é declarada como parâmetro do forEach?

Aí quando eu declaro o forEach e coloco uma função qualquer (ex: array.forEach(function(parametro){ } ), o forEach automaticamente assume "parametro" como o "elemento" da função interna "outraFuncao" do forEach?

Opa, Renato.

A ideia é exatamente essa.

Mas a implementação do forEach fica escondida lá dentro do Array.

solução!

Obrigado pela resposta Alexandre! Foi muito útil para mim!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software