Funciones flecha (arrow functions) en JavaScript explicadas claramente
Jairo
A primera vista “parecen lo mismo, pero no lo son”. En mi día a día, trato a los arrays como listas ordenadas por índice, pensadas para recorrerse, apilar, encolar y transformar. Los objetos, en cambio, los uso para modelar entidades del mundo real mediante pares clave–valor: nombre, precio, estado, etc. Esa diferencia mental me evita errores: si necesito posición o orden natural, pienso en array; si necesito etiquetas o atributos, pienso en objeto.
Cuando probé a explicar esto a un compañero, le dije: “los arrays están ordenados por índice y tienen métodos para transformar la lista; los objetos son datos desordenados con clave y valor”. Y lo pilló con un ejemplo cotidiano: un carro (el objeto) con marca: "Toyota" y color: "blanco". Ese tipo de analogía baja la confusión.
Detalles que conviene tatuarse:
Piensa en una cola o pila de elementos. Lo importante es el orden, no el significado de la “posición 7”. Con arrays, JavaScript te da un arsenal eficiente para añadir, quitar, buscar y transformar.
Creación y acceso
const numeros = [10, 20, 30]; console.log(numeros[0]); // 10 console.log(numeros.at(-1)); // 30 (último elegante)
Añadir y quitar
const cola = [1, 2, 3]; cola.push(4); // [1,2,3,4] (añade al final) cola.pop(); // [1,2,3] (quita del final) cola.unshift(0); // [0,1,2,3] (añade al inicio) cola.shift(); // [1,2,3] (quita del inicio)
Regla práctica: push/pop suelen ser más rápidos que unshift/shift porque estos últimos mueven índices internos.
Recorrido y transformación
const products = [
{ id: 1, price: 10 },
{ id: 2, price: 20 },
{ id: 3, price: 30 }
];
const total = products.reduce((acc, p) => acc + p.price, 0); // 60
const ids = products.map(p => p.id); // [1,2,3]
const caros = products.filter(p => p.price >= 20); // [{id:2},{id:3}]
Búsquedas útiles
const frutas = ["uva","mango","pera"];
frutas.includes("mango"); // true
frutas.indexOf("pera"); // 2
frutas.find(f => f.startsWith("m")); // "mango"
Errores comunes con arrays
const ordenado = [...nums].sort((a,b)=>a-b);
Cuándo un array brilla
Un objeto describe qué es algo: sus atributos y valores. Yo lo veo como una ficha o registro. Retomo el ejemplo que suelo usar: “un carro que vendría a ser el objeto, y tendría clave y valor: marca = "Toyota", color = "blanco" y así”. Nada de orden por índice; aquí manda el nombre de la propiedad.
Creación y acceso
const carro = {
marca: "Toyota",
color: "blanco",
encendido: false
};
console.log(carro.marca); // "Toyota" (acceso por punto)
console.log(carro["color"]); // "blanco" (acceso por corchetes)
Propiedades dinámicas
const key = "puertas"; carro[key] = 4; // agrega propiedad "puertas" delete carro.encendido; // elimina propiedad
Recorridos
const user = { id: 1, name: "Ana", role: "admin" };
// Claves
Object.keys(user); // ["id","name","role"]
// Valores
Object.values(user); // [1,"Ana","admin"]
// Entradas [clave, valor]
Object.entries(user);// [["id",1],["name","Ana"],["role","admin"]]
Cuándo un objeto brilla
Antipatrones a evitar
const visitas = new Map();
visitas.set("ana", 3);
visitas.set("luis", 5);
visitas.get("ana"); // 3
En mis proyectos, esta es la guía mental que me ahorra tiempo (sin tablas, formato en árbol de decisiones):
Ejemplos rápidos del mundo real
En mi experiencia, los problemas de rendimiento suelen venir de elecciones de estructura y mutaciones accidentales.
Sí
No
Micro-tips que me han salvado
// Copiar sin mutar: const sorted = [...arr].sort(); // conserva arr intacto const reversed = [...arr].reverse(); // idem // Asegurar últimas posiciones: const last = arr.at(-1); // más limpio que arr[arr.length - 1] // Quitar duplicados rápidamente: const sinDuplicados = [...new Set(arr)];
1) Colección de entidades: buscar por ID eficientemente
// Datos recibidos del backend:
const users = [
{ id: "u1", name: "Ana" },
{ id: "u2", name: "Luis" },
{ id: "u3", name: "Marta" }
];
// Búsqueda frecuente por id → crea un índice auxiliar:
const byId = Object.fromEntries(users.map(u => [u.id, u]));
// Uso:
byId["u2"].name; // "Luis"
2) Transformar array ⇄ objeto para UI
const configPairs = [["theme","dark"],["lang","es"]];
const config = Object.fromEntries(configPairs);
// { theme: "dark", lang: "es" }
const backToPairs = Object.entries(config);
// [["theme","dark"],["lang","es"]]
3) “Lista de tareas” (array) + “ficha de tarea” (objeto)
const tasks = [];
function addTask(title) {
tasks.push({ id: crypto.randomUUID(), title, done: false });
}
function toggleTask(id) {
const i = tasks.findIndex(t => t.id === id);
if (i !== -1) tasks[i] = { ...tasks[i], done: !tasks[i].done };
}
4) Evitar “arrays asociativos”: usa Map
const visitas = new Map();
visitas.set("ana", 3);
visitas.set("luis", 7);
visitas.get("ana"); // 3
¿Por qué typeof [] es "object"?
Porque los arrays son objetos especializados con comportamiento de índice y una propiedad length que se actualiza automáticamente.
¿Existen arrays asociativos en JS?
No. Si necesitas claves no numéricas, usa objetos o Map.
¿Cómo leo el último elemento de forma limpia?
arr.at(-1) es claro y evita cálculos con length.
¿Cuándo elegir Map en vez de objeto?
Cuando las claves no son conocidas de antemano, cambian mucho o no son strings, y haces muchas operaciones de inserción/consulta.
¿Por qué sort() me “desordena” datos fuera de mi función?
Porque muta el array original. Copia antes: const ordenado = [...arr].sort(...).
La frontera útil es simple: array para colecciones ordenadas y transformables, objeto para describir entidades con propiedades nombradas. En mi caso, desde que interioricé “lista vs. ficha”, dejé de inventar “arrays asociativos” y gané claridad en el código. Si algo se identifica por posición, es un array; si por nombre, es un objeto. Y cuando necesites rendimiento con claves dinámicas, salta a Map/Set sin miedo.
No hay comentarios aún. ¡Sé el primero en comentar!
🍪 Utilizamos cookies para mejorar tu experiencia de navegación, analizar el tráfico del sitio y personalizar el contenido. Al continuar navegando, aceptas nuestro uso de cookies. Más información