Arrays

Você tem um carrinho de compras, uma lista de pontuações, os nomes de todos em um grupo de chat. Uma variável segura um valor, então armazenar uma lista dessa forma significa pilhas de nomes separados: price1, price2, price3, e nenhuma maneira limpa de fazer loop sobre eles ou perguntar quantos há. Um array é a solução. Ele segura uma lista ordenada de valores sob um único nome, e conhece seu próprio comprimento, então você pode adicionar a ele, ler qualquer item e percorrer o tudo em poucas linhas.
Fazendo e lendo um array
Um array é uma lista ordenada de valores. Você escreve um com colchetes, com os valores separados por vírgulas:
const prices = [4, 9, 2, 7];Essa é uma variável, prices, segurando quatro números. Para ler um único valor você usa sua posição, chamada de índice, entre colchetes. O detalhe que confunde quase everyone no começo: a contagem começa em zero, não um.
const names = ["Marina", "João", "Yuki"];
console.log(names[0]); // Marina
console.log(names[1]); // JoãoPara perguntar quantos items um array tem, use .length:
console.log(names.length); // 3Como a contagem começa em zero, o último item fica em length - 1, não em length. Então o último nome aqui é names[2], e names[3] ficaria para além do final.
names[0], e lembre-se que a contagem começa em zero, então o primeiro item é [0], não [1]. Esse zero me confundiu por uma semana, então verifique sempre que sua lista ficar deslocada por um. Use .length para contar os itens, e o último vive em length - 1. Alterando um array
Arrays são feitos para mudar. Os dois que você mais acessa adicionam ou removem no final: push adiciona um item, pop remove o último.
const cart = ["maçãs", "pão"];
cart.push("leite");
console.log(cart); // ["maçãs", "pão", "leite"]
cart.pop();
console.log(cart); // ["maçãs", "pão"]O par correspondente funciona no início: unshift adiciona ao início, shift remove o primeiro item.
cart.unshift("ovos");
console.log(cart); // ["ovos", "maçãs", "pão"]Você também pode substituir um item diretamente atribuindo a seu índice:
cart[0] = "bananas";
console.log(cart); // ["bananas", "maçãs", "pão"]Para encontrar algo, includes lhe diz sim ou não, e indexOf lhe diz onde está (ou -1 se não estiver lá):
console.log(cart.includes("maçãs")); // true
console.log(cart.indexOf("pão")); // 2Uma coisa que vale a pena saber cedo: um array const ainda pode ser alterado. const o impede de reatribuir o nome cart para um novo array inteiro, mas a lista para a qual aponta ainda está aberta para push, pop e atribuição de índice.
push e pop adicionam e removem no final; unshift e shift fazem o mesmo no início. Atribua a um índice como cart[0] = "bananas" para substituir um item, e use includes ou indexOf para encontrar um. A parte que me surpreendeu: um array const ainda pode mudar, porque const só o impede de trocar o array inteiro por um novo. Fazendo loops sobre um array
Uma vez que você tem uma lista, você geralmente quer fazer algo com cada item. A forma mais limpa de ler um array é for...of, que lhe dá um item de cada vez:
const prices = [4, 9, 2, 7];
for (const price of prices) {
console.log(price);
}
// 4
// 9
// 2
// 7Você não gerencia um índice ou um contador. for...of lhe dá cada valor em ordem, e você o nomeia (price) como quiser. Se você já conheceu loops, esse é o mais amigável para arrays.
Há também forEach, que executa uma pequena função uma vez para cada item:
const names = ["Marina", "João", "Yuki"];
names.forEach(function (name) {
console.log("Olá " + name);
});Ambas percorrem o array inteiro. Alcance for...of quando você quer ler de forma limpa, e você conhecerá forEach e seus primos novamente quando aprender a transformar arrays.
for...of é a forma limpa de percorrer um array: ele lhe entrega cada item em ordem e você nunca toca um índice. forEach executa uma pequena função uma vez por item, o que é útil também. Ambas percorrem a lista inteira, então escolha for...of quando você quer ler diretamente por ela. Você verá mais ferramentas de array uma vez que começar a transformá-los. Arrays são mantidos por referência
Aqui está um comportamento que surpreende as pessoas, então vale a pena ver cedo. Quando você copia uma variável de array para outro nome, você não obtém um segundo array. Ambos os nomes apontam para o mesmo.
const original = [1, 2, 3];
const copy = original;
copy.push(4);
console.log(original); // [1, 2, 3, 4]Fazer push para copy alterou original, porque nunca houve dois arrays. O = entregou ao segundo nome a mesma lista, não uma cópia nova dela. Isso é o que as pessoas querem dizer quando dizem que arrays são mantidos por referência: a variável segura um ponteiro para a lista, não a lista em si.
Para obter uma cópia real e separada, espalhe o array para um novo com ...:
const original = [1, 2, 3];
const copy = [...original];
copy.push(4);
console.log(original); // [1, 2, 3], intocado= não cria um segundo array; ambos os nomes apontam para o mesmo, então uma mudança através de qualquer um aparece em ambos. Esse me pegou mais de uma vez. Quando você quer uma cópia real separada, espalhe-a com [...original], o que constrói um novo array que você pode alterar por conta própria. Para onde arrays vão daqui
Um array lhe dá uma lista ordenada sob um único nome: crie um com [], leia-o por índice a partir de zero, altere-o com push e pop, e percorra-o com for...of. A ideia única a levar além deste capítulo é que um array é mantido por referência, então copiar a variável compartilha a lista em vez de duplicá-la.
O próximo passo natural é transformar um array em outro, filtrar uma lista, transformar cada item, adicionar tudo junto, sem escrever o loop à mão. Isso são array methods. Quando você precisa procurar valores por um nome em vez de uma posição, objects são a estrutura para isso.

