Maps y Sets
El invitado guarda su bebida dentro de un Map. Los extras van a un Set, y cada extra entra una sola vez. lida arranca con tea y acaba con mint. Al conjunto pasan mint y lemon. En la página se lee lida / mint / 2.
La página del modo estricto queda aparte
Allí saltó ReferenceError por un nombre que no existía. En esta no salta nada. Si la clave no está, get devuelve undefined.
La misma clave cambia la bebida
orders.set("lida", "tea") deja la primera bebida. orders.set("lida", "mint") no abre otra fila: pisa el valor de esa clave. size cuenta claves, no las veces que llamaste a set.
const orders = new Map();
orders.set("lida", "tea");
orders.set("lida", "mint");
console.log(orders.get("lida"));
console.log(orders.size);
En la consola sale mint y después 1. nima nunca se guardó, así que orders.get("nima") vale undefined. orders.has("lida") vale true. El mapa se lee con get. orders.lida y orders["lida"] son sintaxis de objeto y no leen este mapa.
La clave es el objeto, no sus campos
Un mapa admite un objeto como clave y se queda con ese objeto, no con un texto armado a partir de los campos. Otro objeto con los mismos campos es otra clave.
const cup = { guest: "lida" };
const other = { guest: "lida" };
const orders = new Map();
orders.set(cup, "tea");
console.log(orders.get(cup));
console.log(orders.get(other));
console.log(orders.size);
La consola muestra tea, luego undefined, luego 1. Un objeto corriente convertiría las dos claves en el texto "[object Object]", y la segunda escritura taparía la primera. El mapa no hace eso.
mint repetida cuenta como una
Aunque add("mint") se llame dos veces, queda una sola mint. lemon es otro valor, y size llega a 2. has responde sí o no. No devuelve el valor.
const extras = new Set();
extras.add("mint");
extras.add("mint");
extras.add("lemon");
console.log(extras.size);
console.log(extras.has("lemon"));
La consola muestra 2 y después true. new Set(["mint", "mint", "lemon"]) arma el mismo conjunto: la copia de mint ya no está. Un set solo tiene valores. No guarda una bebida bajo un invitado.
delete saca una entrada
Si quitó algo, delete devuelve true. Si el valor no estaba, devuelve false y el conjunto sigue igual.
const extras = new Set(["mint", "lemon"]);
console.log(extras.delete("lemon"));
console.log(extras.size);
console.log(extras.has("lemon"));
La consola muestra true, luego 1, luego false. mint sigue dentro. Un mapa también tiene delete y has, pero trabajan con la clave: orders.delete("lida") quita a ese invitado.
La línea que pinta la página
Se reemplaza la bebida de lida, el conjunto se arma con tres palabras, y se escriben invitado, bebida y size.
<!DOCTYPE html>
<html>
<body>
<p id="line">…</p>
<script>
const orders = new Map();
orders.set("lida", "tea");
orders.set("lida", "mint");
const extras = new Set(["mint", "mint", "lemon"]);
const line = document.querySelector("#line");
line.textContent = "lida / " + orders.get("lida") + " / " + extras.size;
</script>
</body>
</html>
La línea dice lida / mint / 2. El primer set hacia tea no se ve. La mint repetida no sube size. ReferenceError era la línea del modo estricto.
Cinco pasos en la barra
- Pon lida en tea y luego en mint. get("lida") es mint y size es 1.
- Guarda tea bajo cup. get(other) es undefined y size sigue en 1.
- Añade mint, mint y lemon. size es 2 y has("lemon") es true.
- Borra lemon. size es 1 y has("lemon") es false.
- Mira la página. La línea es lida / mint / 2.
Tropiezos, y lo que conviene recordar
Un segundo set en la misma clave actualiza. Un segundo add del mismo extra se ignora.
- No leas el mapa con orders["lida"]
- Dos objetos parecidos no son una sola clave
- has no devuelve la bebida
- new Set ya tira las copias
- No leas la línea como ReferenceError
Para llevar
- set reemplaza y size se queda
- las claves objeto son los objetos mismos
- un set guarda cada valor una vez
- delete quita una entrada
- la línea de la página es lida / mint / 2
🧠 Pon a Prueba tu Conocimiento
Pon a Prueba tu Conocimiento
Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema
📝 Instrucciones
- Lee cada pregunta cuidadosamente
- Selecciona la mejor respuesta para cada pregunta
- Puedes repetir el quiz tantas veces como quieras
- Tu progreso se mostrará en la parte superior