Creación y Acceso
Un array es una variable especial que puede contener más de un valor a la vez.
const coches = ["Saab", "Volvo", "BMW"];
const vacio = []; // Array vacío
Acceder a Elementos
Los índices empiezan en 0.
let coche = coches[0]; // "Saab"
coches[0] = "Opel"; // Modificar
coches.length; // 3 (Número de elementos)
coches[coches.length - 1]; // Acceder al último (Forma tradicional)
coches.at(-1); // Acceder al último (Forma moderna y limpia)
Métodos Básicos
toString(): Convierte a string separado por comas.join(" * "): Como toString() pero puedes especificar el separador.pop(): Elimina el último elemento y lo devuelve.push(): Añade un nuevo elemento al final.shift(): Elimina el primer elemento y lo desplaza todo.unshift(): Añade un nuevo elemento al inicio.
let frutas = ["Banana", "Naranja"];
frutas.push("Kiwi"); // ["Banana", "Naranja", "Kiwi"]
let x = frutas.pop(); // x es "Kiwi"
Manipulación Avanzada
Concatenar (Unir)
const chicas = ["Cecilie", "Lone"];
const chicos = ["Emil", "Tobias", "Linus"];
const todos = chicas.concat(chicos);
Splice (Empalmar)
Se usa para añadir o eliminar elementos en cualquier posición.
// (posición, cuantos_borrar, elementos_a_añadir...)
frutas.splice(2, 0, "Limón", "Kiwi");
frutas.splice(0, 1); // Borra el primero
Slice (Rebanar)
Crea un nuevo array a partir de un trozo de otro (no modifica el original).
const citricos = frutas.slice(1); // Desde el índice 1 hasta el final
const parte = frutas.slice(1, 3); // Desde el 1 hasta el 3 (sin incluir)
Búsqueda y Ordenación
indexOf("item"): Posición del elemento.includes("item"): true/false.find(func): Devuelve el primer elemento que pasa un test.findIndex(func): Devuelve el índice del primer elemento que pasa un test.
const numeros = [4, 9, 16, 25];
let mayorQue18 = numeros.find(x => x > 18); // 25
Ordenar
frutas.sort(); // Orden alfabético (modifica el original)
frutas.reverse(); // Invierte el orden
puntos.sort((a, b) => a - b);
✨ Métodos Inmutables (ES2023)
Históricamente, sort() y reverse() mutaban (rompían) el array original.
Ahora tenemos versiones que devuelven un nuevo array:
toSorted(): Crea una copia ordenada.toReversed(): Crea una copia invertida.toSpliced(): Crea una copia con cambios de splice.
const original = [3, 1, 2];
const ordenado = original.toSorted();
// original sigue siendo [3, 1, 2]
// ordenado es [1, 2, 3]
🧠 Explicación "Para Humanos" del (a - b)
La pregunta del millón es: ¿Por qué si da negativo lo pone antes?
Es simplemente una REGLA (un contrato) que inventaron los creadores de JavaScript. Es como obedecer a un semáforo:
| Resultado resta (a - b) | Significado Real | Orden del "Portero" (La Regla) |
|---|---|---|
| Negativo (-) | A es menor que B | Poner A a la izquierda (Antes) ⬅️ |
| Positivo (+) | A es mayor que B | Poner A a la derecha (Después) ➡️ |
| Cero (0) | Son iguales | Dejarlos quietos 😐 |
Por eso a - b ordena de menor a mayor:
Si tienes 5 y 100 -> la resta 5 - 100 da -95
(Negativo).
Y la regla dice: "¿Salió negativo? Pues el primero (5) va a la izquierda".
🕵️♀️ Curiosidad nivel PRO: ¿Cómo lo hace por dentro?
Si te preguntas si compara "el 1º con el 2º" y luego sigue... la respuesta es: depende del tamaño.
Para listas pequeñas (como [4, 5, 3, 2, 1, 0]), JavaScript usa la estrategia de
"Ordenar Cartas" (Insertion Sort):
- Empieza por la izquierda. Ve el
4y el5. ¿Están bien? Sí (4 < 5). Se quedan así. - Llega el
3. No lo compara solo con el siguiente, sino que mira hacia atrás buscando su sitio:- ¿3 vs 5? Gana 3. (Pasa delante)
- ¿3 vs 4? Gana 3. (Pasa delante)
- ¡Sitio encontrado! Se queda el primero.
Resumen: No recorre la lista ciegamente hacia adelante. Toma cada número nuevo y lo "inserta" en el hueco correcto de los que ya tiene ordenados a su izquierda.
*Para listas gigantes usa algoritmos más complejos (Timsort) que dividen y vencen, pero la lógica base de comparar parejas se mantiene.
Iteración (Recorrer Arrays)
La forma moderna y funcional de trabajar con listas.
ℹ️ Contexto para los ejemplos: Usaremos este array de números:
const numeros = [4, 9, 16, 25];
forEach()
Ejecuta una función por cada elemento.
numeros.forEach(num => console.log(num));
map()
Crea un nuevo array transformando cada elemento.
const doble = numeros.map(num => num * 2); // [8, 18, 32, 50]
filter()
Crea un nuevo array con los elementos que pasan un test.
const mayores = numeros.filter(num => num > 18); // [25]
reduce()
Reduce el array a un único valor (de izquierda a derecha).
const suma = numeros.reduce((total, num) => total + num, 0); // 54
every() y some()
every(): ¿Todos pasan el test? (true/false)some(): ¿Alguno pasa el test? (true/false)
Sets (Conjuntos)
Colecciones de valores únicos.
Un Set es una colección de valores únicos (sin duplicados). A diferencia de
los Arrays, no tienen índices (no puedes pedir el elemento 0, el 1...).
Creación
const miSet = new Set();
miSet.add(1);
miSet.add(5);
miSet.add(5); // Ignorado (ya existe)
// O desde un array
const nombres = new Set(["Ana", "Pepe", "Ana"]); // {"Ana", "Pepe"}
Métodos y Propiedades
size: Cantidad de elementos (como .length).add(valor): Agrega un valor.delete(valor): Borra un valor. Devuelve true si existía.has(valor): ¿Existe el valor? (Más rápido que .includes() de array).clear(): Borra todo.
console.log(nombres.has("Ana")); // true
nombres.delete("Pepe");
console.log(nombres.size); // 1
Iteración
Se pueden recorrer igual que los Arrays con for...of o forEach.
for (const nombre of nombres) {
console.log(nombre);
}
Truco PRO: Eliminar Duplicados de un Array
La forma más rápida de limpiar un Array usando Sets y el operador spread (...).
const numeros = [1, 2, 2, 3, 3, 4];
const unicos = [...new Set(numeros)];
// [1, 2, 3, 4]