1
resposta

[Dúvida] For clássico X ForEach

Existe situações onde o forEach deve (Obrigatoriamente) ser usado em vez do for clássico?

Consegui o mesmo resultado desse jeito:

const mais = document.querySelectorAll('.soma'); const menos = document.querySelectorAll('.subtrai'); const resultado = document.querySelectorAll('.controle-contador');

function valorFinal(lista, indice, parametro) { if (parametro === 'mais') { lista[indice].value = Number(lista[indice].value) + 1; } else if (parametro === 'menos') { lista[indice].value = Number(lista[indice].value) - 1; } };

for (let i = 0; i < menos.length; i++) { menos[i].onclick = function () { valorFinal(resultado, i, 'menos') }

for (let j = 0; j < mais.length; j++) { mais[j].onclick = function () { valorFinal(resultado, j, 'mais') } } };

1 resposta

Do meu ponto de vista, não tem nenhuma situação onde forEach seja obrigatório. Em geral, usamos o forEach por uma questão de legibilidade, redução de escrita de código, também porque ele faz alguns tratamentos de exceção para gente que o for clássico não faz.

Além disso, existem casos onde você não consegue usar o forEach. Por exemplo, se você precisa modificar o array original ou mudar a posição dos elementos dentro do array o forEach não pode não te ajudar muito. Neste caso, o uso do for clássico ou outros métodos já disponíveis no JS, por exemplo, será o mais indicado.

Outro ponto é sobre a manipulação do DOM. Você só pode manipular elementos ou listas de nós(NodeList) se aquele método estiver disponível no elemento para manipulação. Então, se o forEach não estiver disponível, aí você pode tentar usar o for clássico para manipular esse array-like objects de elementos. Mas, em muito casos precisará converter de array-like objects para um array, usando spread operator ([...nomeDoArrayLikeObject]) ou o método [Array.from(nomeDoArrayLikeObject)]();

Tirando esses pontos, fica mais a critério da pessoa que está desenvolvendo, a consideração e o conhecimento dela, ou seja, depende do caso e situação... rsrs

Alguns links para conhecer e saber mais sobre o assunto:

  1. MDN - Array.prototype.forEach()
  2. MDN - Array-like objects
  3. MDN - Array.from()
  4. Spread syntax (...)
  5. forEach JavaScript: Como Potencializar seus Loops em Arrays
  6. Why do you need to know about Array-like Objects?