Iteração sobre array em JavaScript: 5 erros fatais e como evitá-los

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como percorrer array em JavaScript: Principais erros e como evitá-los

\n\n

Você já escreveu um código que deveria simplesmente percorrer uma lista de tarefas ou itens no carrinho, mas em vez disso retornou undefined, um loop infinito ou, pior ainda, corrompeu dados silenciosamente? Dor familiar. A pergunta "How to loop through the items of an array in JavaScript?" é uma das mais populares no Stack Overflow. Parece que poderia ser mais simples? Mas o diabo, como sempre, está nos detalhes.

\n\n

Hoje não vamos apenas analisar como percorrer um array em JavaScript. Vamos olhar por baixo do capô das armadilhas mais comuns em que iniciantes (e não só) caem. Você descobrirá por que for...in pode te prejudicar, como forEach difere de map e como evitar um loop infinito em for.

\n\n

Pronto? Vamos corrigir bugs e escrever código bonito.

\n\n

Erro nº1: Usar for...in para arrays

\n\n

Esta é, talvez, a armadilha mais traiçoeira para iniciantes. O desenvolvedor vê a palavra for e a palavra in e pensa: "Ah, isso é para percorrer tudo!". Tecnicamente, é verdade. Mas para arrays, isso é um desastre.

\n\n

O loop for...in foi projetado para percorrer propriedades de objeto, não elementos de array. Sim, um array em JS também é um objeto, mas seus índices são apenas chaves de string ("0", "1", "2").

\n\n

Aqui está o problema:

\n
    \n
  • A ordem não é garantida. Embora os navegadores geralmente mantenham a ordem, não se pode confiar nisso.
  • \n
  • Ele percorre toda a herança de protótipo. Se você ou alguma biblioteca adicionou um método a Array.prototype (por exemplo, Array.prototype.myCustomMethod = function() {}), for...in também o incluirá.
  • \n
\n\n

Exemplo de código (como NÃO fazer):

\n
const arr = [10, 20, 30];\nArray.prototype.customMethod = () => {};\n\nfor (let index in arr) {\n  console.log(arr[index]); // Exibirá: 10, 20, 30, ƒ () => {}\n}\n
\n\n

Viu? No final, apareceu nossa função personalizada. O código quebrou.

\n\n

Como fazer corretamente:

\n

Use for...of (para valores) ou o clássico for (para índices). for...of percorre apenas os valores e ignora o protótipo.

\n
// Correto e seguro\nfor (let value of arr) {\n  console.log(value); // 10, 20, 30\n}\n
\n\n

Erro nº2: Esquecer o callback em forEach

\n\n

arr.forEach(callback) é uma forma elegante de percorrer um array em JavaScript. Mas muitos o confundem com map ou filter. O principal erro é pensar que forEach retorna algo. Ele retorna undefined.

\n\n

O segundo erro comum é esquecer o segundo e terceiro argumentos do callback (índice e o próprio array). Às vezes, isso é crítico.

\n\n

Exemplo de erro:

\n
const numbers = [1, 2, 3];\nconst doubled = numbers.forEach(num => num * 2);\nconsole.log(doubled); // undefined! Erro.\n
\n\n

Como fazer corretamente:

\n

Se você precisa criar um novo array baseado no antigo, use map(). Se precisa apenas executar uma ação (por exemplo, exibir no console ou enviar dados), use forEach().

\n
// Para criar um novo array\nconst doubled = numbers.map(num => num * 2); // [2, 4, 6]\n\n// Para efeitos colaterais\nnumbers.forEach((num, index) => {\n  console.log(`Elemento ${index}: ${num}`);\n});\n
\n\n

Erro nº3: Loop infinito em for

\n\n

Clássico do gênero. Você escreve for (let i = 0; i < arr.length; i++), mas esquece o incremento i++ ou, pior ainda, modifica o array dentro do loop.

\n\n

Suponha que você esteja filtrando o array em tempo real, removendo elementos com splice(). Se você não corr

Blogs

Book Recommendations