Executando verificação de segurança...
1

Como usar o forEach em Javascript: exemplos detalhados contados em uma história

Como você faria para resolver esse 3 problemas usando o forEach no seu primeiro dia de trabalho como pessoa desenvolvedora Javascrit:

  • Alterar o estilo dos cards de produtos de um grid
  • Alterar apenas o último card de cada linha
  • Alterar os cards da segunda metade da lista

grid de produtos em um commerce

Criei uma solução para esses 3 problemas com o forEach, para ajudar quem está estudando.

As soluções envolvem uma parte fundamental do forEach que é os 3 parâmetros que a função callback recebe:

  1. item
  2. index
  3. array
const produtos = document.querySelectorAll('.produto');

produtos.forEach(function(item, index, array) {
  console.log(item);  // cada um dos itens da lista
  console.log(index); // o índice/index dele, começa em zero e vai aumentando
  console.log(array); // retorna sempre a lista (não array) que vc está iterando
});

Por que o parâmetro array não retorna uma array e sim uma lista? Assim, de forma genérica?

Porque forEach não funciona apenas para arrays, mas também para nodelists. Esses são apenas dois iteráveis do Javascript, existem vários outros.

Mostrei tudo isso em detalhes no meu blog.

Vou deixar o link nas fontes :D

Qualquer dúvida, é só comentar que respondo com o maior prazer!

Carregando publicação patrocinada...
3

Por que o parâmetro array não retorna uma array e sim uma lista? Assim, de forma genérica?

Porque forEach não funciona apenas para arrays, mas também para nodelists.

Só pra ser chato (sim, eu sou :-P), da forma que foi escrito dá a impressão de que forEach é algo que está acima do array, nodelist e demais iteráveis, e que por isso ele recebe sempre uma estrutura genérica que serve para todos os casos.

Mas na verdade é o contrário: cada objeto define seu próprio método forEach, que por usa vez tem sua própria versão do callback. O fato de todos funcionarem da mesma forma é mero detalhe.

Veja na documentação que no método forEach do Array, o terceiro parâmetro da função de callback é o próprio array. Não é uma estrutura genérica, é o array no qual forEach foi chamado.

Já no caso do NodeList, a documentação diz que o terceiro parâmetro é o próprio NodeList (novamente, não é uma estrutura genérica, é o próprio objeto no qual forEach foi chamado).

O mesmo vale para outros objetos, como Map (no qual o terceiro parâmetro é o próprio Map - e neste caso é mais interessante, já que Map não é uma lista), Set (o terceiro parâmetro é o próprio Set), Headers (o terceiro parâmetro é o próprio objeto Headers), etc.

Ou seja, cada um desses diferentes objetos definiu o método forEach (que por acaso funcionam da mesma forma, até porque não tem muito o que inventar). Em todos eles a função de callback recebe como terceiro parâmetro o próprio objeto no qual forEach foi chamado (e sempre é o próprio objeto, nunca uma estrutura genérica). Tanto é que na respectiva documentação de cada objeto, repare como o nome do parâmetro muda para refletir o que ele de fato é.

1

Veja na documentação que no método forEach do Array, o terceiro parâmetro da função de callback é o próprio array. Não é uma estrutura genérica, é o array no qual forEach foi chamado.

Já no caso do NodeList, a documentação diz que o terceiro parâmetro é o próprio NodeList (novamente, não é uma estrutura genérica, é o próprio objeto no qual forEach foi chamado).

Entendi o que tu falou, e era exatamente isso que quis passar quando escrevi, não sei se consegui.

Vi que tu insistiu na expressão estrutura genérica, mas não foi isso que escrevi. Estrutura genérica dá a entender que existe uma estrutura de dados em Javascript (que tem seu próprio prototype) que é genérica.

O que eu quis dizer foi forma genérica, em oposição a forma específica.

O que seria específico?

  • Array
  • Nodelist
  • ...

O que seria genérico?

  • Uma lista que pode ser tanto array quanto nodelist, depende de quem chamou o forEach

Lá no post escrevi duas frases que podem estar mais claras:

  • "Ele geralmente se chama array e retorna a própria lista que você está iterando."
  • "E o terceiro é a própria array que você está iterando."

Acho que foi mais a escolha errada de palavras, mas a intenção foi passar o mesmo que tu disse.