Métodos Essenciais para Manipulação de Arrays em JavaScript

Introdução

Em JavaScript, arrays são objetos especiais que herdam de Object.prototype, mas possuem métodos próprios defindios em Array.prototype. Este artigo aborda os principais métodos disponíveis para manipulação de arrays.

Inserção e Remoção de Elementos

Os métodos push, unshift, pop e shift modificam o array original.

push

Adiciona elementos ao final do array e retorna o novo tamanho.

const lista = [10, 20, 30];
const tamanho = lista.push(40);
console.log(lista);    // [10, 20, 30, 40]
console.log(tamanho);  // 4

unshift

Adiciona elementos no início do array e retorna o novo tamanho.

const lista = [20, 30, 40];
const tamanho = lista.unshift(10);
console.log(lista);    // [10, 20, 30, 40]
console.log(tamanho);  // 4

pop

Remove e retorna o último elemento. Se o array estiver vazio, retorna undefined.

const lista = [10, 20, 30, 40];
const removido = lista.pop();
console.log(lista);    // [10, 20, 30]
console.log(removido); // 40

shift

Remove e retorna o primeiro elemento. Se o array estiver vazio, retorna undefined.

const lista = [10, 20, 30, 40];
const removido = lista.shift();
console.log(lista);    // [20, 30, 40]
console.log(removido); // 10

Iteração e Transformação

Os métodos forEach, map, filter e find percorrem o array recebendo uma função callback com três parâmetros: elemento atual, índice e o próprio array.

forEach

Executa uma função para cada elemento, sem retornar um novo array.

const valores = [10, 20, 30, 40];
valores.forEach(item => console.log(item));
// 10, 20, 30, 40

map

Cria um novo array com os resultados da aplicação da função a cada elemento.

const valores = [10, 20, 30, 40];
const dobrados = valores.map(item => item * 2);
console.log(dobrados); // [20, 40, 60, 80]

filter

Cria um novo array contendo apenas os elementos que passam no teste da função.

const valores = [1, 2, 3, 4, 5];
const pares = valores.filter(item => item % 2 === 0);
console.log(pares); // [2, 4]

find

Retorna o primeiro elemento que satisfaz a função de teste, ou undefined caso não encontre.

const valores = [5, 12, 8, 130, 44];
const encontrado = valores.find(item => item > 10);
console.log(encontrado); // 12

Extração e Modificação: slice e splice

slice

Retorna uma cópia superficial de parte do array, sem modificar o original. Aceita índice inicial (inclusivo) e final (exclusivo). Valores negativos contam a partir do final.

const original = [1, 2, 3, 4, 5];
console.log(original.slice(0, 3));   // [1, 2, 3]
console.log(original.slice(1));      // [2, 3, 4, 5]
console.log(original.slice(-4, -1)); // [2, 3, 4]
console.log(original.slice(-4));     // [2, 3, 4, 5]

splice

Modifica o array removendo e/ou inserindo elementos. Parâmetros: índice inicial, quantidade a remover (opcional) e elementos a adicionar. Retorna os elementos removidos.

// Remoção
const dados = [1, 2, 3, 4, 5, 6];
const removidos = dados.splice(2, 3);
console.log(removidos); // [3, 4, 5]
console.log(dados);     // [1, 2, 6]

// Inserção
const dados2 = [1, 2, 3, 4, 5, 6];
dados2.splice(2, 0, 'a', 'b');
console.log(dados2); // [1, 2, 'a', 'b', 3, 4, 5, 6]

// Substituição
const dados3 = [1, 2, 3, 4, 5, 6];
dados3.splice(2, 1, 'a', 'b');
console.log(dados3); // [1, 2, 'a', 'b', 4, 5, 6]

Ordenação: sort e reverse

Ambos modificam o array original.

reverse

Inverte a ordem dos elementos in-place.

const valores = [1, 2, 3, 4, 5];
valores.reverse();
console.log(valores); // [5, 4, 3, 2, 1]

sort

Por padrão, converte elementos em strings e ordena por code point Unicode. Para ordenação numérica, utilize uma função comparadora.

// Ordenação padrão (string)
const misto = ['a', 3, '11', 'ab', '2', 1, '15'];
misto.sort();
console.log(misto); // [1, '11', '15', '2', 3, 'a', 'ab']

// Ordenação numérica decrescente
const numeros = [40, 100, 1, 5, 25];
numeros.sort((a, b) => b - a);
console.log(numeros); // [100, 40, 25, 5, 1]

Busca de Índices: indexOf e lastIndexOf

indexOf

Retorna o primeiro índice onde o elemento foi encontrado, ou -1. Aceita um índice inicial opcional.

const frutas = ["Maçã", "Banana", "Manga", "Laranja", "Banana"];
console.log(frutas.indexOf("Banana"));      // 1
console.log(frutas.indexOf("Banana", 2));   // 4

lastIndexOf

Busca de trás para frente, retornando o último índice encontrado.

const frutas = ["Maçã", "Banana", "Manga", "Laranja", "Banana"];
console.log(frutas.lastIndexOf("Banana"));     // 4
console.log(frutas.lastIndexOf("Banana", 2));  // 1

Redução: reduce e reduceRight

Acumulam os elementos em um único valor. A função callback recebe: acumulador, valor atual, índice e o array.

reduce

Percorre o array da esquerda para a direita.

const valores = [1, 2, 3, 4];
const somar = (acc, val) => acc + val;
console.log(valores.reduce(somar));     // 10
console.log(valores.reduce(somar, 10)); // 20

reduceRight

Percorre o array da direita para a esquerda.

const matriz = [[0, 1], [2, 3], [4, 5]];
const achatar = (acc, val) => acc.concat(val);
console.log(matriz.reduceRight(achatar, [])); // [4, 5, 2, 3, 0, 1]

Verificação Condicional: some e every

some

Retorna true se pelo menos um elemento satisfizer a condição.

const valores = [1, 2, 3, 4, 5];
const temPar = valores.some(n => n % 2 === 0);
console.log(temPar); // true

every

Retorna true apenas se todos os elementos satisfizerem a condição.

const valores = [2, 4, 6, 8, 10];
const todosPares = valores.every(n => n % 2 === 0);
console.log(todosPares); // true

Outros Métodos de Instância

join

Cocnatena os elementos em uma string, usando um separador (vírgula por padrão).

const itens = [1, 2, 3, 4, 5];
console.log(itens.join());     // "1,2,3,4,5"
console.log(itens.join('-'));  // "1-2-3-4-5"

flat

Achata arrays aninhados. Aceita a profundidade como argumento; Infinity achata todos os níveis. Não modifica o original.

const aninhado = [1, [2, [3, [4]]]];
console.log(aninhado.flat());           // [1, 2, [3, [4]]]
console.log(aninhado.flat(2));          // [1, 2, 3, [4]]
console.log(aninhado.flat(Infinity));   // [1, 2, 3, 4]

fill

Preenche todos os elementos com um valor estático.

const preenchido = new Array(3).fill(null);
console.log(preenchido); // [null, null, null]

concat

Mescla dois ou mais arrays sem modificar os originais.

const grupoA = ['a', 'b', 'c'];
const grupoB = ['d', 'e', 'f'];
const combinado = grupoA.concat(grupoB);
console.log(combinado); // ['a', 'b', 'c', 'd', 'e', 'f']

includes

Verifica se o array contém um determinado valor, retornando true ou false.

const valores = [1, 1, 2, 3, 4, 4, 3];
console.log(valores.includes(2));      // true
console.log(valores.includes(2, 3));   // false

Métodos Estáticos de Array

Array.isArray

Verifica se um valor é um array.

const teste = [];
console.log(Array.isArray(teste)); // true

Array.from

Cria um array a partir de objetos iteráveis ou semelhantes a arrays.

// Objeto semelhante a array
const obj = { '0': 'a', '1': 'b', '2': 'c', length: 3 };
console.log(Array.from(obj)); // ['a', 'b', 'c']

// Com função de mapeamento
const num = { length: 2, 0: 1, 1: 2 };
console.log(Array.from(num, x => x * 2)); // [2, 4]

// String
console.log(Array.from('hello')); // ['h', 'e', 'l', 'l', 'o']

// Set
const conjunto = new Set([1, 2, 3, 4, 5]);
console.log(Array.from(conjunto)); // [1, 2, 3, 4, 5]

Array.of

Cria um array com os argumentos fornecidos. Diferente do construtor Array(), não enterpreta um único número como tamanho.

console.log(Array(2));     // [empty × 2]
console.log(Array.of(2));   // [2]

console.log(Array(0));      // []
console.log(Array.of(0));   // [0]

Métodos do Objeto Math Aplicados a Arrays

Embora não sejam métodos de array, funções de Math são frequentemente usadas com arrays numéricos.

const valores = [3.14, 4.99, -1.56, -2.45];
console.log(Math.max(...valores)); // 4.99
console.log(Math.min(...valores)); // -2.45
console.log(valores.map(Math.floor)); // [3, 4, -2, -3]
console.log(valores.map(Math.ceil));  // [4, 5, -1, -2]
console.log(valores.map(Math.round)); // [3, 5, -2, -2]

Tags: javascript Array Array.prototype Métodos de Array ES6

Publicado em 7-17 07:40