Arreglos

Tienes un carrito de compras, una lista de puntuaciones, los nombres de todos en un chat grupal. Una variable almacena un valor, así que guardar una lista de esta manera significa un montón de nombres separados: price1, price2, price3, sin forma clara de recorrerlos o preguntar cuántos hay. Un arreglo es la solución. Almacena una lista ordenada de valores bajo un solo nombre y conoce su propia longitud, así que puedes agregar a él, leer cualquier elemento y recorrer todo en pocas líneas.
Crear y leer un arreglo
Un arreglo es una lista ordenada de valores. Lo escribes con corchetes, con los valores separados por comas:
const prices = [4, 9, 2, 7];Esa es una variable, prices, que almacena cuatro números. Para leer un valor individual usas su posición, llamada su índice, en corchetes. La trampa que atrapa a casi todos al principio: la cuenta comienza en cero, no en uno.
const names = ["María", "Carlos", "Yuki"];
console.log(names[0]); // María
console.log(names[1]); // CarlosPara preguntar cuántos elementos tiene un arreglo, usa .length:
console.log(names.length); // 3Como la cuenta comienza en cero, el último elemento está en length - 1, no en length. Así que el último nombre aquí es names[2], y names[3] estaría fuera del final.
names[0], y recuerda que la cuenta comienza en cero, así que el primer elemento es [0], no [1]. Ese cero me confundió durante una semana, así que verifica cuando tu lista esté fuera por uno. Usa .length para contar los elementos, y el último vive en length - 1. Cambiar un arreglo
Los arreglos se hacen para cambiar. Los dos a los que recurres más agregan o removes en el final: push agrega un elemento, pop remueve el último.
const cart = ["manzanas", "pan"];
cart.push("leche");
console.log(cart); // ["manzanas", "pan", "leche"]
cart.pop();
console.log(cart); // ["manzanas", "pan"]El par correspondiente funciona en el inicio: unshift agrega al frente, shift remueve el primer elemento.
cart.unshift("huevos");
console.log(cart); // ["huevos", "manzanas", "pan"]También puedes reemplazar un elemento directamente asignándolo a su índice:
cart[0] = "plátanos";
console.log(cart); // ["plátanos", "manzanas", "pan"]Para encontrar algo, includes te dice sí o no, e indexOf te dice dónde está (o -1 si no está):
console.log(cart.includes("manzanas")); // true
console.log(cart.indexOf("pan")); // 2Una cosa que vale la pena saber temprano: un arreglo const aún puede cambiar. const te detiene de reasignar el nombre cart a un arreglo completamente nuevo, pero la lista a la que apunta aún está abierta para push, pop y asignación de índice.
push y pop agregan y removen al final; unshift y shift hacen lo mismo al inicio. Asigna a un índice como cart[0] = "plátanos" para reemplazar un elemento, y usa includes o indexOf para encontrar uno. La parte que me sorprendió: un arreglo const aún puede cambiar, porque const solo te detiene de intercambiar el arreglo completo por uno nuevo. Recorrer un arreglo
Una vez que tienes una lista, generalmente quieres hacer algo con cada elemento. La forma más clara de leer un arreglo es for...of, que te da un elemento a la vez:
const prices = [4, 9, 2, 7];
for (const price of prices) {
console.log(price);
}
// 4
// 9
// 2
// 7No administras un índice o un contador. for...of te da cada valor en orden, y lo nombras (price) como quieras. Si ya has conocido bucles, este es el más amable para arreglos.
También está forEach, que ejecuta una pequeña función una vez para cada elemento:
const names = ["María", "Carlos", "Yuki"];
names.forEach(function (name) {
console.log("Hola " + name);
});Ambos recorren el arreglo completo. Recurre a for...of cuando quieras leer limpiamente, y conocerás forEach y sus primos de nuevo cuando aprendas a transformar arreglos.
for...of es la forma limpia de recorrer un arreglo: te da cada elemento en orden y nunca tocas un índice. forEach ejecuta una pequeña función una vez por elemento, que también es útil. Ambos van a través de la lista completa, así que elige for...of cuando quieras leer directamente. Verás más herramientas de arreglo una vez que llegues a transformarlos. Los arreglos se sostienen por referencia
Aquí hay un comportamiento que sorprende a la gente, así que vale la pena verlo temprano. Cuando copias una variable de arreglo en otro nombre, no obtienes un segundo arreglo. Ambos nombres apuntan al mismo.
const original = [1, 2, 3];
const copy = original;
copy.push(4);
console.log(original); // [1, 2, 3, 4]Hacer push a copy cambió original, porque solo había un arreglo. El = le dio al segundo nombre la misma lista, no una copia fresca de ella. Esto es lo que la gente significa cuando dice que los arreglos se sostienen por referencia: la variable sostiene un puntero a la lista, no la lista en sí.
Para obtener una copia real y separada, extiende el arreglo en uno nuevo con ...:
const original = [1, 2, 3];
const copy = [...original];
copy.push(4);
console.log(original); // [1, 2, 3], sin cambios= no hace un segundo arreglo; ambos nombres apuntan al mismo, así que un cambio a través de cualquiera aparece en ambos. Este me atrapó más de una vez. Cuando quieras una copia real separada, extiéndela con [...original], que construye un arreglo fresco que puedes cambiar por tu cuenta. Hacia dónde van los arreglos desde aquí
Un arreglo te da una lista ordenada bajo un nombre: créalo con [], léelo por índice desde cero, cámbialo con push y pop, y recórrelo con for...of. La idea única que debes llevar más allá de este capítulo es que un arreglo se sostiene por referencia, así que copiar la variable comparte la lista en lugar de duplicarla.
El siguiente paso natural es convertir un arreglo en otro, filtrar una lista, transformar cada elemento, sumarlo todo, sin escribir el bucle a mano. Eso son métodos de arreglo. Cuando necesites buscar valores por un nombre en lugar de una posición, objetos son la estructura para eso.

