Array vs Object vs Set vs Map: elegir estructura correcta

Aprende a seleccionar la estructura de datos adecuada según tu objetivo: listas ordenadas, diccionarios simples, claves únicas o claves de cualquier tipo.

Elegir bien la estructura de datos es una decisión de diseño, no un detalle menor de sintaxis.

`Array` brilla cuando importa el orden; `Object` para diccionarios simples; `Set` para valores únicos; `Map` para pares clave/valor más flexibles.

Cuando eliges mal, el código se complica: más conversiones, más condicionales y peor rendimiento percibido.

Objetivo de esta lección: desarrollar criterio para escoger estructura según operaciones reales de producto.

  • Primero piensa en la operación dominante: recorrer, buscar, deduplicar o indexar.
  • No hay una estructura universalmente mejor. La correcta depende de cómo se usan los datos durante el ciclo de vida de la funcionalidad.
  • Si necesitas acceso por índice usa `Array`; si necesitas unicidad usa `Set`; si necesitas claves complejas y tamaño fiable usa `Map`.
  • Son básicos, pero cubrirán gran parte de tu trabajo diario si los aplicas bien.
  • `Array` encaja para secuencias donde el orden importa: historial, feed, productos, resultados de búsqueda.

Modelo mental para decidir rápido

Primero piensa en la operación dominante: recorrer, buscar, deduplicar o indexar.

No hay una estructura universalmente mejor. La correcta depende de cómo se usan los datos durante el ciclo de vida de la funcionalidad.

Si necesitas acceso por índice usa `Array`; si necesitas unicidad usa `Set`; si necesitas claves complejas y tamaño fiable usa `Map`.

Cuándo usar Array y cuándo Object

Son básicos, pero cubrirán gran parte de tu trabajo diario si los aplicas bien.

`Array` encaja para secuencias donde el orden importa: historial, feed, productos, resultados de búsqueda.

`Object` encaja para representar una entidad concreta con propiedades estables (`usuario`, `config`, `estado`).

  • No uses object para simular lista numérica.
  • No uses array para campos nombrados de una entidad.
  • Piensa si tu interfaz recorre por índice o accede por clave semántica.
  • Mantén tipos de datos consistentes dentro de la misma colección.

Set: unicidad sin lógica extra

Evita `if` repetidos para detectar duplicados.

Cuando necesitas saber si un valor ya existe o eliminar repeticiones, `Set` simplifica mucho el código.

Además de deduplicar arrays, es útil para estados de selección, permisos activos o IDs vistos durante paginación.

Map: índices rápidos y claves avanzadas

Ideal para búsquedas frecuentes por clave y para claves no string.

Si haces muchas búsquedas por id (`get`, `has`), `Map` suele ser más claro y directo que recorrer arrays cada vez.

También permite usar objetos como clave, algo útil en cachés o relaciones entre entidades en memoria.

  • `Map` expone `.size` real sin cálculos extra.
  • Sus métodos (`set/get/has/delete`) expresan intención de forma clara.
  • Funciona mejor que object cuando las claves no son strings.
  • Útil para cache local y lookup tables en UI compleja.

Checklist de decisión para producción

Antes de codificar, responde estas 4 preguntas.

Definir estructura al inicio reduce refactors dolorosos cuando la feature crece y llegan nuevos requisitos de negocio.

Aplicar este checklist te ayuda a mantener el código más simple, expresivo y fácil de testear.

  • ¿Necesito mantener orden y recorrer elementos? -> Array.
  • ¿Represento una entidad con propiedades nombradas? -> Object.
  • ¿Necesito valores únicos y membership rápido? -> Set.
  • ¿Necesito pares clave/valor con claves flexibles o lookup intensivo? -> Map.
JavaScript
21

Array vs Object vs Set vs Map: elegir estructura correcta

Aprende a seleccionar la estructura de datos adecuada según tu objetivo: listas ordenadas, diccionarios simples, claves únicas o claves de cualquier tipo.

Código del tema: Array · Object · Set · Map

📘 Teoría

Modelo mental para decidir rápido

Primero piensa en la operación dominante: recorrer, buscar, deduplicar o indexar.

No hay una estructura universalmente mejor. La correcta depende de cómo se usan los datos durante el ciclo de vida de la funcionalidad.

Si necesitas acceso por índice usa `Array`; si necesitas unicidad usa `Set`; si necesitas claves complejas y tamaño fiable usa `Map`.

1

Array

2

Object

3

Set

4

Map

Cuándo usar Array y cuándo Object

Son básicos, pero cubrirán gran parte de tu trabajo diario si los aplicas bien.

`Array` encaja para secuencias donde el orden importa: historial, feed, productos, resultados de búsqueda.

`Object` encaja para representar una entidad concreta con propiedades estables (`usuario`, `config`, `estado`).

  • No uses object para simular lista numérica.
  • No uses array para campos nombrados de una entidad.
  • Piensa si tu interfaz recorre por índice o accede por clave semántica.
  • Mantén tipos de datos consistentes dentro de la misma colección.
Lista + entidad
const tareas = ['leer', 'practicar', 'revisar'];
const usuario = { id: 7, nombre: 'Lucía', rol: 'student' };

console.log(tareas[0]);
console.log(usuario.nombre);

Set: unicidad sin lógica extra

Evita `if` repetidos para detectar duplicados.

1

Cuando necesitas saber si un valor ya existe o eliminar repeticiones, `Set` simplifica mucho el código.

2

Además de deduplicar arrays, es útil para estados de selección, permisos activos o IDs vistos durante paginación.

Eliminar duplicados
const etiquetas = ['js', 'css', 'js', 'html', 'css'];
const unicas = [...new Set(etiquetas)];

console.log(unicas);
console.log(new Set(etiquetas).has('js'));

Map: índices rápidos y claves avanzadas

Ideal para búsquedas frecuentes por clave y para claves no string.

Si haces muchas búsquedas por id (`get`, `has`), `Map` suele ser más claro y directo que recorrer arrays cada vez.

También permite usar objetos como clave, algo útil en cachés o relaciones entre entidades en memoria.

  • `Map` expone `.size` real sin cálculos extra.
  • Sus métodos (`set/get/has/delete`) expresan intención de forma clara.
  • Funciona mejor que object cuando las claves no son strings.
  • Útil para cache local y lookup tables en UI compleja.
Indexar por id
const usuarios = [
  { id: 1, nombre: 'Ana' },
  { id: 2, nombre: 'Luis' },
  { id: 3, nombre: 'Marta' }
];

const indice = new Map(usuarios.map((u) => [u.id, u]));

console.log(indice.get(2));
console.log(indice.has(4));

Checklist de decisión para producción

Antes de codificar, responde estas 4 preguntas.

Definir estructura al inicio reduce refactors dolorosos cuando la feature crece y llegan nuevos requisitos de negocio.

Aplicar este checklist te ayuda a mantener el código más simple, expresivo y fácil de testear.

  • ¿Necesito mantener orden y recorrer elementos? -> Array.
  • ¿Represento una entidad con propiedades nombradas? -> Object.
  • ¿Necesito valores únicos y membership rápido? -> Set.
  • ¿Necesito pares clave/valor con claves flexibles o lookup intensivo? -> Map.

🧪 Aprende probando

Ejemplo Ejemplo guiado: deduplicar categorías Convierte una lista con repetidos en una colección de categorías únicas.
Ejemplo Ejemplo guiado: índice de productos por id Crea un `Map` para acceder a productos por id sin recorrer toda la lista.
Ejemplo Demo interactiva: limpiar tags e indexar usuarios Introduce tags con comas y revisa deduplicación con Set e indexación con Map.

🏁 Retos

Reto Reto 1: limpiar y verificar etiquetas Usa `Set` para quedarte con etiquetas únicas y comprueba si existe una etiqueta concreta.
Reto Reto 2: función indexarUsuarios Crea una función que devuelva un `Map` indexado por `id` y úsala para buscar un usuario.

🧰 Recursos

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .