Menu

Arrays em JavaScript: criar, acessar e percorrer

Entenda como funcionam os arrays em JavaScript: criação, índices, length, push e pop, slice vs splice e os loops mais limpos para percorrer.

O que é um array em JavaScript

Um array em JavaScript guarda uma sequência ordenada de valores. Esses valores podem ser de qualquer tipo — números, strings, objetos e até outros arrays — e nem precisam ser todos do mesmo tipo. Para criar um array, basta usar colchetes:

index.js
Output
Click Run to see the output here.

Essa sintaxe literal é como você vai criar arrays em JavaScript em 99% dos casos. Existe também o new Array(...), mas ele tem uma pegadinha: new Array(3) cria um array com length 3 e nenhum elemento de verdade dentro, e não [3]. Fica no [] mesmo.

O índice começa no zero

Para acessar elementos do array, você usa a posição — começando do 0:

index.js
Output
Click Run to see the output here.

Dois detalhes importantes aqui. Primeiro: acessar um índice fora do array não dispara erro nenhum — simplesmente retorna undefined. Essa é uma fonte clássica daqueles bugs do tipo "por que isso tá vindo undefined?". Segundo: você pode atribuir um valor a qualquer índice, inclusive um depois do final do array, que o JavaScript vai estender o array sem reclamar:

index.js
Output
Click Run to see the output here.

As posições 3 e 4 viram "slots vazios" (buracos no array esparso). O length salta para 6. Você raramente vai querer isso — é um efeito colateral da flexibilidade dos arrays em JavaScript, não um recurso em que vale a pena se apoiar.

length é dinâmico

O array.length é sempre uma unidade a mais que o maior índice. Ele se atualiza sozinho conforme você adiciona ou remove elementos:

index.js
Output
Click Run to see the output here.

Vale guardar esse truque: atribuir um valor a length corta o array. Fazer nums.length = 0 é uma forma rápida de esvaziar o array no próprio lugar.

push, pop, shift e unshift em JavaScript

Quatro métodos para adicionar e remover itens nas pontas do array:

index.js
Output
Click Run to see the output here.
  • push(x) adiciona no final e retorna o novo tamanho do array.
  • pop() remove do final e retorna o elemento removido.
  • unshift(x) adiciona no começo.
  • shift() remove do começo.

push e pop são rápidos. Já shift e unshift precisam reindexar todos os outros elementos, então ficam mais lentos em arrays grandes — tranquilo para tamanhos do dia a dia, mas vale saber se você estiver lidando com milhões de itens.

slice vs splice em JavaScript

Esses dois métodos têm nomes parecidos e comportamentos completamente diferentes. Entenda a diferença de uma vez e você vai economizar muita dor de cabeça.

O slice(start, end) retorna uma cópia de um pedaço do array, sem mexer no original. O end não entra no resultado:

index.js
Output
Click Run to see the output here.

splice(start, deleteCount, ...items) altera o array original. Dá pra usar para remover, inserir ou as duas coisas ao mesmo tempo, e o retorno é o que foi removido:

index.js
Output
Click Run to see the output here.

Regra prática: se a palavra te lembra fatiar uma cópia de um pão, é slice. Se te lembra emendar um filme (cortar e inserir), é splice.

Buscando elementos: indexOf, includes e find

Três formas de procurar algo em um array, cada uma pra uma situação:

index.js
Output
Click Run to see the output here.
  • indexOf(x) devolve a posição do item, ou -1 se ele não estiver no array. Útil quando você precisa do índice.
  • includes(x) devolve um booleano. Fica mais limpo quando você só quer saber "esse valor está aí dentro?". Além disso, trata NaN corretamente, coisa que o indexOf não faz.
  • find(predicate) executa uma função para cada elemento e retorna o primeiro que bater com a condição. Esse é o método certo para array de objetos em javascript, já que indexOf e includes só fazem comparação estrita de igualdade.

Como percorrer um array em javascript

Existem algumas formas legais, e cada uma se encaixa melhor em uma situação:

index.js
Output
Click Run to see the output here.

for...of costa ser a escolha padrão — fica legível, funciona com qualquer iterável e já te entrega o valor direto. forEach é ok quando você também precisa do índice e não vai interromper o loop no meio (não dá pra usar break dentro de forEach). O for clássico com índice é mais verboso, mas te dá controle total — use quando precisar pular elementos, percorrer o array de trás pra frente, ou os dois.

Um loop pra evitar: for...in. Ele itera chaves e ainda inclui propriedades herdadas. Isso é coisa de objeto, não de array.

Copiando e combinando arrays

Arrays são valores por referência. Atribuir um a outro não copia nada — você só cria dois nomes pro mesmo array:

index.js
Output
Click Run to see the output here.

Para copiar um array de verdade, use o spread operator ou o slice():

index.js
Output
Click Run to see the output here.

Os dois geram uma cópia rasa — o array de cima é novo, mas se os elementos forem objetos, esses objetos continuam sendo compartilhados. O spread também é a forma mais limpa de juntar arrays:

index.js
Output
Click Run to see the output here.

Arrays de objetos em JavaScript

Na prática, a maioria dos arrays em JavaScript guarda objetos. Os mesmos métodos continuam funcionando, só que agora as comparações ficam bem mais interessantes:

index.js
Output
Click Run to see the output here.

filter devolve um novo array com os elementos que passam por um teste (predicado). Já map devolve um novo array em que cada elemento foi transformado. Encadear os dois é o feijão com arroz de quem trabalha com array de objetos em JavaScript — e a próxima página aprofunda justamente essa família de métodos de array.

Arrays e objetos: quando usar cada um

Um modelo mental rápido: use array quando a ordem importa e você está lidando com uma lista de coisas do mesmo tipo. Use objeto (ou um Map) quando você quer acessar valores por uma chave. "Primeiro, segundo, terceiro" é cenário de array. "Buscar o usuário com id 42" é cenário de objeto ou Map.

Dá pra combinar os dois — arrays de objetos aparecem o tempo todo —, mas não use array como se fosse um dicionário indexado por chave, nem use objeto como se fosse uma lista ordenada. Cada um faz bem o seu papel.

A seguir: desestruturação

Extrair valores de um array pelo índice (e propriedades de um objeto pelo nome) é algo tão comum que o JavaScript tem uma sintaxe dedicada pra isso. Chama-se desestruturação, e é o assunto da próxima página.

Perguntas frequentes

Como criar um array em JavaScript?

O jeito idiomático é usar colchetes: const frutas = ['maçã', 'banana']. O construtor Array (new Array(3)) até existe, mas quase nunca é o que você quer — new Array(3) cria um array de tamanho 3 sem nenhum elemento de verdade, o que pega muita gente de surpresa.

Como remover um item de um array em JavaScript?

Para tirar do final, use pop(). Do começo, shift(). Se for no meio, splice(indice, 1) remove direto no array original, ou então filter(...) para gerar um novo array sem o item. Lembrando: splice altera o array original; filter não mexe nele.

Qual a diferença entre slice e splice?

slice(inicio, fim) devolve uma cópia rasa de um pedaço do array e não mexe no original. Já splice(inicio, quantidade, ...itens) altera o array original — remove elementos, pode inserir novos no lugar e retorna os que foram removidos. Uma letrinha de diferença, comportamentos bem distintos.

Como verificar se um valor existe em um array JavaScript?

Use array.includes(valor) — retorna true ou false e ainda trata NaN corretamente. Já indexOf(valor) devolve a posição ou -1 se não achar, útil quando você também precisa do índice. Para comparações mais complexas, vá de some(predicado) ou find(predicado).

Aprenda a programar com o Coddy

COMEÇAR