forEach JavaScript: exemplos práticos

O método forEach JavaScript é uma ferramenta válida, por permitir iterar de forma simples e direta sobre os elementos de uma coleção (array ou um objeto).

Usar o `forEach`, portanto, torna desnecessária a preocupação com índices ou chaves, tornando a sintaxe mais limpa e fácil de entender. Por isso, ele é um método costumeiramente escolhido ao invés do for, ainda que tenha suas limitações.

Essa funcionalidade torna o código mais legível e reduz a probabilidade de erros, tornando, dessa forma, o `forEach` uma escolha útil e eficiente para realizar operações em cada elemento da coleção de forma concisa e clara. Confira o texto abaixo e compreenda sua funcionalidade e aplicações.

O que é forEach JavaScript?

O “forEach” é um método útil em JavaScript para iterar de forma simples e direta sobre os elementos de uma coleção, como um array ou um objeto. Ele evita a necessidade de se preocupar com índices ou chaves, proporcionando, assim, uma sintaxe mais limpa e legível.

Exemplo de forEach

Em JavaScript, o `forEach` é um método que permite percorrer todos os elementos de um array, um por um, e realizar uma ação para cada elemento. Ele é como um ajudante que lhe permite inspecionar cada item do array sem precisar escrever um monte de código repetitivo.

Vamos ver um exemplo simples usando o `forEach`. Suponha que temos um array de frutas:

const frutas = ['maçã', 'banana', 'laranja', 'uva'];

Agora, queremos imprimir cada fruta no console. Usando o `forEach`, podemos fazer isso de forma fácil e clara:

frutas.forEach(function(fruta) {

  console.log(fruta);

});

O que acontece aqui é que o `forEach` percorre cada elemento do array `frutas`. Para cada fruta, ele executa uma função que nós fornecemos. Nesse caso, usamos uma função que simplesmente imprime cada fruta no console. 

Então, quando o `forEach` é executado, ele imprimirá:

maçã

banana

laranja

uva

O `forEach` é muito útil quando você precisa fazer algo com cada elemento do array, como calcular valores, modificar os elementos, exibir informações ou realizar qualquer outra ação.

Como usar forEach em JavaScript?

Para utilizar o “forEach” em JavaScript, basta chamá-lo em um array ou utilizar a função "Object.keys()" para obter um array de chaves de um objeto. 

Em seguida, passamos uma função de callback que será executada para cada elemento do array, permitindo a realização de operações específicas em cada elemento da coleção. Isso é necessário porque a função “callback” é um parâmetro da função principal, ela precisa ser finalizada para que a função principal seja executada.

Exemplo de uso de forEach com array

const cores = ['vermelho', 'verde', 'azul'];

// Utilizando o forEach para exibir as cores do array

cores.forEach(cor => {

  console.log(cor);

});

Exemplo de uso de forEach com objeto:

const aluno = {

  nome: 'Maria',

  idade: 25,

  curso: 'Ciências da Computação'

};

// Utilizando o forEach para exibir as propriedades do objeto

Object.keys(aluno).forEach(propriedade => {

  console.log(`${propriedade}: ${aluno[propriedade]}`);

});

Como lidar com loops em forEach em JavaScript

Diferentemente do laço “for“, o “forEach” não pode ser interrompido antecipadamente. Para evitar loops, verifique se a função de callback não está causando uma condição sempre verdadeira.

Exemplo de possível loop infinito em forEach

const numeros = [1, 2, 3, 4, 5];

// Utilizando forEach para multiplicar os números por 2, mas com um erro

numeros.forEach(numero => {

  numeros.push(numero * 2); // Isso causará um loop infinito!

});

Como usar forEach com arrays em JavaScript

Para utilizar “forEach” com arrays, basta chamar o método “forEach” no array e passar uma função de callback que será executada para cada elemento.

Exemplo de uso de forEach com array

const frutas = ['maçã', 'banana', 'laranja'];

// Utilizando forEach para imprimir o plural de cada fruta

frutas.forEach(fruta => {

  console.log(fruta + 's');

});

Como usar forEach com objetos em JavaScript

Para utilizar “forEach” com objetos, é necessário transformar as chaves do objeto em um array usando a função "Object.keys()" e, em seguida, chamar o método “forEach” nesse array.

Exemplo de uso de forEach com objeto

const pessoa = {

  nome: 'Ana',

  idade: 28,

  profissao: 'Advogada'

};

// Utilizando forEach para exibir as propriedades e valores do objeto

Object.keys(pessoa).forEach(propriedade => {

  console.log(`${propriedade}: ${pessoa[propriedade]}`);

});

Alternativas ao `forEach` em JavaScript

Ao percorrer arrays em JavaScript, existem alternativas ao loop `forEach`. Abaixo, mostraremos três opções: `for` loop tradicional, `for...of` loop e as funções de array `map`, `reduce` e `filter`.

1. For Loop Tradicional

O loop `for` tradicional é uma das formas mais comuns de percorrer arrays em JavaScript. Neste exemplo, percorremos um array de números e exibimos cada elemento no console:

const array = [1, 2, 3, 4, 5];

for (let i = 0; i < array.length; i++) {

  console.log(array[i]);

}

2. For…of Loop

O loop `for...of` é uma alternativa moderna e legível ao `forEach`. Ele nos permite iterar diretamente sobre os elementos do array:

const array = [1, 2, 3, 4, 5];

for (const elemento of array) {

  console.log(elemento);

}

3. Funções de Array

As funções `map`, `reduce` e `filter` proporcionam uma maneira mais concisa e expressiva de manipular arrays, sem a necessidade de um loop explícito:

Map

O método `map` cria um novo array com os resultados de uma função aplicada a cada elemento do array original. Neste exemplo, multiplicamos cada elemento por 2:

const array = [1, 2, 3, 4, 5];

const novoArray = array.map(elemento => elemento * 2);

console.log(novoArray); // [2, 4, 6, 8, 10]

Reduce

O método `reduce` reduz o array a um único valor, acumulando os resultados da função aplicada a cada elemento. Aqui, somamos todos os elementos do array:

const array = [1, 2, 3, 4, 5];

const soma = array.reduce((acumulador, elemento) => acumulador + elemento, 0);

console.log(soma); // 15

Filter

O método `filter` cria um novo array com os elementos que passam em um teste especificado por uma função. Neste caso, filtramos apenas os números pares:

const array = [1, 2, 3, 4, 5];

const arrayFiltrado = array.filter(elemento => elemento % 2 === 0);

console.log(arrayFiltrado); // [2, 4]

Cada uma dessas alternativas tem seus próprios benefícios e podem ser mais adequadas dependendo do contexto e da finalidade do código. 

É importante considerar a legibilidade do código, o desempenho e a simplicidade da abordagem ao escolher a melhor opção para o seu projeto.

Os benefícios de usar forEach em JavaScript

  • Sintaxe mais limpa e legível em comparação com o laço de iteração “for;
  • Evita o gerenciamento de índices ou chaves manualmente;
  • Funciona bem com funções de ordem superior (higher-order functions) e callbacks.

Os desafios de usar forEach em JavaScript

Embora o forEach seja uma opção útil para percorrer arrays em JavaScript, ele também apresenta alguns desafios que podem limitar suas possibilidades em certas situações. Dois desafios importantes que servem de exemplo, são:

1. Falta de controle de fluxo

Um dos principais desafios do forEach é que ele não oferece controle de fluxo, o que significa que não é possível interromper a iteração antecipadamente usando um break, nem retornar de forma condicional com um return

Dessa maneira, isso pode ser problemático quando você precisa parar o loop assim que uma determinada condição for atendida ou retornar um valor específico com base em alguma condição.

Por exemplo, suponha que você tenha um array de números e queira encontrar o primeiro número par. Usando o forEach, você não pode parar o loop assim que encontrar o primeiro número par:

const numeros = [1, 3, 2, 5, 4, 6];

numeros.forEach(function(numero) {

  if (numero % 2 === 0) {

    // Não é possível fazer um "break" aqui para parar o loop

    // Não é possível retornar o número par aqui com um "return"

  }

});

2. Falta de acesso ao índice ou chave do elemento

Outro desafio do forEach é que ele não fornece um mecanismo direto para acessar o índice ou chave do elemento durante a iteração. Em algumas situações, você pode precisar dessa informação para fins de cálculo, manipulação ou outros processos.

Dessa forma, se você deseja percorrer um array e exibir tanto o elemento quanto o seu índice, não é possível fazer isso diretamente com o forEach:

const frutas = ['maçã', 'banana', 'laranja'];

frutas.forEach(function(fruta) {

  console.log(fruta); // Exibe apenas o elemento (fruta), mas não o índice.

});

Embora o forEach possa ser útil para muitas tarefas de iteração simples em arrays, é importante estar ciente de suas limitações. 

Se você precisa de mais controle de fluxo ou acesso ao índice/chave do elemento durante a iteração, outras abordagens, como o uso do for loop tradicional, for…of ou funções de array como map, reduce e filter, podem ser mais adequadas para suas necessidades específicas. 

Cada abordagem tem suas próprias vantagens e desvantagens, e é importante, portanto, escolher a que melhor se adapte ao seu caso de uso particular.

Quando usar forEach em vez de for em JavaScript

Conforme o que dissemos antes, forEach é especialmente útil quando você precisa iterar sobre os elementos de uma coleção, como um array, e realizar uma operação em cada elemento sem se preocupar com os índices ou chaves. Isso torna o código mais legível, conciso e menos propenso a erros.

Aqui estão algumas situações em que o forEach é uma escolha mais adequada em vez do laço for em JavaScript:

Iteração Simples

Quando você precisa apenas percorrer todos os elementos do array e executar uma operação em cada um, sem necessidade de manipulação de índices ou contadores, o forEach é uma opção mais clara e limpa.

Legibilidade do Código

O forEach torna o código mais legível, pois expressa claramente a intenção do loop: executar uma ação para cada elemento do array. Isso torna o código mais fácil de entender para outros desenvolvedores que possam estar lendo ou mantendo o código.

Menos Erros

Ao usar o forEach, você evita erros comuns associados ao gerenciamento de índices em loops for. Erros de off-by-one (como começar com índice 1 em vez de 0) ou loops infinitos acidentais são menos prováveis com o forEach.

Sintaxe Mais Concisa

O forEach tem uma sintaxe mais concisa e elegante em comparação com o loop for, o que torna o código mais enxuto e de fácil compreensão.

Vamos comparar um exemplo de uso do for com o forEach para percorrer e exibir elementos de um array:

Usando “for” para percorrer um array

const frutas = ['maçã', 'banana', 'laranja', 'uva'];

for (let i = 0; i < frutas.length; i++) {

  console.log(frutas[i]);

}

Usando “forEach” para percorrer um array

const frutas = ['maçã', 'banana', 'laranja', 'uva'];

frutas.forEach(function(fruta) {

  console.log(fruta);

});

Neste exemplo, o resultado de ambos os loops é o mesmo: as frutas são exibidas no console. No entanto, o forEach é mais expressivo e conciso, tornando o código mais claro e fácil de entender.

Em resumo, sempre que você precisar apenas iterar sobre os elementos de uma coleção, executar uma operação em cada elemento e não precisar manipular índices ou chaves, o forEach é a escolha mais apropriada em JavaScript. 

Quando não usar forEach em JavaScript:

Evite usar “forEach” quando

  • Precisar interromper a iteração antecipadamente com “break” ou retornar de forma condicional com “return“;
  • Necessitar acessar o índice ou a chave do elemento durante a iteração.

Exemplo de situação em que não é adequado utilizar forEach

const numeros = [1, 2, 3, 4, 5];

// Tentando usar forEach para encontrar o número 3 e interromper a iteração

let encontrado = false;

numeros.forEach(numero => {

  if (numero === 3) {

    encontrado = true;

    // Não é possível interromper aqui!

  }

});

console.log(encontrado);

Conclusão

Em suma, o uso do método forEach é uma abordagem que reduz consideravelmente as preocupações relacionadas ao código e possíveis erros dentro dele. Essa vantagem é obtida através da capacidade do forEach de tornar a sintaxe mais legível, limpa e menos repetitiva, facilitando a compreensão do código.

Ao contrário do tradicional loop for, o código utilizando forEach é notavelmente mais conciso. Ele possibilita a execução de funções sem a necessidade de repetir massivamente o mesmo conjunto de códigos manualmente. Essa característica proporciona ao programador uma sensação de segurança, uma vez que sabemos que o método manual pode gerar incertezas e dificuldades de manutenção.

Além disso, a implementação manual de loops pode ser propensa a erros e resultar em perda de tempo, por ser necessário verificar minuciosamente cada variável, função e afins, quando a automatização não está presente.

Assim, ao utilizar forEach em vez de for, você aprendeu uma forma mais eficiente de iterar sobre elementos em uma lista ou coleção.

Essa compreensão permitirá que você distinga de maneira mais clara quando a abordagem com forEach é a mais adequada para o seu código.

Esperamos que este artigo tenha sido uma fonte válida de aprendizado, auxiliando-o a melhorar suas habilidades em programação continuamente. Se você ainda deseja aprender mais sobre for, experimente ler nosso artigo de For em Python: guia completo com 18 exemplos.

Conhecimento nunca é demais, certo?

Este artigo foi útil?

Obrigado pela resposta!
Daiana S

Daiana S

Graduada em Letras pelo Instituto Federal da Paraíba e especializada em redação geral. Gosto de escrever sobre tudo e me dedico em vários níveis de expressividade. No geral, todos os meus hobbies giram em torno de escrever alguma coisa e fazer isso bem.

Contato: daiana.blog@homehost.com.br

Ganhe 30% OFF

Indique seu nome e e-mail,e ganhe um cupom de desconto de 30% para sempre na Homehost!