Trabalhando com arrays
Obter o tamanho de um Array
let cores = ["verde", "amarelo", "vermelho"];
let tamanho = cores.length;
Acessar um item de um Array
let primeira = cores[0];
let ultima = cores[cores.length - 1];
Iterar um Array
// usando forEach
// cores.forEach(function(item, indice, array) {
// console.log(item);
// });
cores.forEach(item => {
console.log(item);
});
// usando for-of
for (let item of cores) {
console.log(item);
}
// usando for
for (let i = 0, n = cores.length; i < n; i++){
console.log(cores[i]);
}
Adicionar e remover itens do Array
// adicionar um item no final
let tamanhoAposAzul = cores.push("azul");
// remover um item do final
let ultimoRemovido = cores.pop();
// adicionar um item no início
let tamanhoAposBranco = cores.unshift("branco");
// remover um item do início
let primeiroRemovido = cores.shift();
// localizar a posição de um item
// retornará -1 caso o valor não seja encontrado
let posicao = cores.indexOf("amarelo");
// adicionar 2 itens a partir da posição 2
let posicaoInserir = 2;
let itensInserir = ["roxo", "cinza"];
cores.splice(posicaoInserir, 0, ...itensInserir);
// remover 2 itens a partir da posição 2
let posicaoRemover = 2;
let quantidadeRemover = 2;
let removidos = cores.splice(posicaoRemover, quantidadeRemover);
Obter um pedaço de um Array
const numeros = [1, 1, 2, 3, 5, 8, 13, 21];
const pedaco = numeros.slice(4, 7); // [5, 8, 13]
Concatenar Arrays
const pares = [2, 4, 6];
const impares = [1, 3, 5];
let novo = pares.concat(impares); // [2, 4, 6, 1, 3, 5]
Conversão entre Array
e String
delimitada
// criar um array inicial
let frutas = ["Laranja", "Abacate", "Maçã", "Abacaxi"];
// criar uma string delimitada por hífens a partir do array
let texto = frutas.join("-"); // "Laranja-Abacate-Maçã-Abacaxi"
// modificar a string, "adicionando" novos itens
texto += "-Uva-Melancia";
// recriar o array a partir da string delimitada
frutas = texto.split('-'); // ["Laranja", "Abacate", "Maçã", "Abacaxi", "Uva", "Melancia"]
Filtrar os itens de um Array
function par(valor){
return valor % 2 === 0;
}
let numeros = [8, 3, 12, -4, 7, -1, 13];
let pares = numeros.filter(par);
// de forma alternativa, com "arrow function"
pares = numeros.filter(num => num % 2 === 0);
Filtrar os objetos de um Array
// itens de uma compra
let itens = [
{ produto: { descrição: "Café torrado moído 500g", preço: 9.5 }, quantidade: 1 },
{ produto: { descrição: "Pão de forma integral", preço: 7.75 }, quantidade: 2 },
{ produto: { descrição: "Manteiga com sal 200g", preço: 8.0 }, quantidade: 1 },
{ produto: { descrição: "Água com gás 510ml", preço: 1.5 }, quantidade: 12 },
{ produto: { descrição: "Pipoca de microondas", preço: 2.5 }, quantidade: 4 }
];
// itens onde a quantidade for maior que 1
let mais_de_1_item = itens
.filter((item) => item.quantidade > 1);
// itens onde o valor total (valor unitário * quantidade) for maior que 10
let valor_total_maior_que_10 = itens
.filter((item) => item.produto.preço * item.quantidade > 10);
// itens onde a descrição do produto começa com a letra P
let descrição_começa_com_p = itens
.filter((item) => item.produto.descrição[0].toUpperCase() === "P");
Ordenar os itens de um Array
let cores = ["verde", "amarelo", "vermelho"];
cores.sort(); // ["amarelo", "verde", "vermelho"]
Inverter a ordem dos itens de um Array
let cores = ["verde", "amarelo", "vermelho"];
cores.reverse(); // ["vermelho", "amarelo", "verde"]
Ordenar os objetos de um Array
let funcionarios = [
{ nome: "João", salario: 3000 },
{ nome: "Maria", salario: 4500 },
{ nome: "Ana", salario: 2500 },
{ nome: "Pedro", salario: 4000 },
{ nome: "Paulo", salario: 2500 }
];
// ordenar por salário
funcionarios.sort((a, b) => a.salario - b.salario);
// ordenar por salário (decrescente)
funcionarios.sort((a, b) => b.salario - a.salario);
// ordenar por nome
funcionarios.sort(function(a, b){
if (a.nome > b.nome) return 1;
else if (a.nome < b.nome) return -1;
else return 0; // iguais
});
Transformar os dados de um Array
com map
/* calcular as taxas correspondentes de um imposto fictício onde:
10% para valores inferiores a 1000
20% para superiores ou iguais a 1000 e inferiores a 5000
30% para valores superiores ou iguais a 5000 */
function calcularImposto(valor){
if (valor < 1000) return valor * 0.1; // 10%
else if (valor < 5000) return valor * 0.2; // 20%
return valor * 0.3; // 30%
}
// valores para calcular
let valores = [500, 800, 1500, 2500, 5000, 5500, 8000, 10000];
// valores dos impostos
let impostos = valores.map(calcularImposto);
// valores detalhados: valor, imposto e total
let detalhes = valores.map(valor => {
const valor_imposto = calcularImposto(valor);
const valor_total = valor + valor_imposto;
return {
valor: valor,
imposto: valor_imposto,
total: valor_total
};
});
“Reduzir” os dados de um Array
O método reduce
aplica uma função com um acumulador em cada valor de um Array
, do primeiro até o último, para reduzi-los a um único valor.
A sintaxe do método reduce
com a função callback
é:
array.reduce(callback(acumulador, valorAtual, índice, array), valorInicial);
Um exemplo para obter a soma dos números que compõem um Array
:
// obter a soma dos números de um array
let numeros = [1, 2, 3, 4, 5];
// let soma = numeros.reduce(function(acumulador, atual, indice, array){
// return acumulador + atual;
// }, 0);
let soma = numeros.reduce((acum, atual) => acum + atual);
“Reduzir” os dados de um Array
de objetos
// obter a soma dos salários dos seguintes funcionários
let funcionarios = [
{ nome: "João", salario: 3000 },
{ nome: "Maria", salario: 4500 },
{ nome: "Ana", salario: 2500 },
{ nome: "Pedro", salario: 4000 },
{ nome: "Paulo", salario: 2500 }
];
// somente com o método reduce
let salariosTotal = funcionarios.reduce((a, b) => {
return { salario: a.salario + b.salario }
}).salario; // 16500
// usando os métodos map e reduce
let salariosTotal_V2 = funcionarios
.map(item => item.salario)
.reduce((a, b) => a + b); // 16500