CodeForge

JavaScript de Cero a Experto / Objetos

Map y Set: colecciones con superpoderes

Teoría18 min20 XP

Dos problemas aparecen tarde o temprano: "necesito una lista SIN repetidos" y "necesito un diccionario clave→valor, pero con claves que no son texto". Para el primero existe Set; para el segundo, Map. Hoy los conoces, con el truco de deduplicar en una línea incluido.

La lista de invitados

Set: valores únicos

El truco final merece cámara lenta: new Set(array) absorbe el array descartando repetidos, y el spread [...] lo vuelve a regar en un array normal. Array → Set → array: duplicados fuera, una línea. Es de los patrones más usados de JavaScript moderno.

Map: el diccionario serio

¿En qué gana Map a un objeto plano? Claves de cualquier tipo (objetos, números...), un size directo sin Object.keys().length, recorrido en orden de inserción garantizado, y agregar/borrar constante sin sorpresas.

Nota honesta: para el 90% de los casos —datos con campos conocidos, como el gasto de siempre— el objeto plano es lo correcto y lo más simple. Map brilla cuando las claves son DINÁMICAS (categorías que el usuario inventa, conteos por palabra) o no son strings. Set, siempre que la palabra "únicos" aparezca en tu problema. No los fuerces donde no aportan.

Tienes const visitas = ['lu', 'ma', 'lu', 'ju', 'ma'] y quieres saber cuántos días DISTINTOS hubo visitas. ¿Cuál es la forma idiomática?

Mini-reto

En "Mi Bolsillo": del array ["comida", "transporte", "comida", "ocio", "comida", "transporte"] saca las categorías únicas con el truco del Set. Luego arma un Map de conteo: recorre el array original y por cada categoría haz conteo.set(c, (conteo.get(c) ?? 0) + 1) — al final recórrelo imprimiendo categoria → veces. Acabas de escribir tu primer contador de frecuencias, un clásico de entrevistas.

Qué sigue

Módulo casi completo: fichas de datos, métodos, desempaque, copias, huecos, JSON y colecciones especiales. Falta lo mejor: ponerlo TODO a trabajar junto. El reto final convierte "Mi Bolsillo" a su versión 2: los gastos dejan de ser números sueltos y se vuelven objetos completos — con nombre, categoría y análisis de verdad.