Cargando...

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.

Sustituir una bebida

javascript
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.

Claves objeto distintas

javascript
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.

Extras sin repetir

javascript
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.

Quitar lemon

javascript
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.

La página — Map y Set

html
<!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

  1. Pon lida en tea y luego en mint. get("lida") es mint y size es 1.
  2. Guarda tea bajo cup. get(other) es undefined y size sigue en 1.
  3. Añade mint, mint y lemon. size es 2 y has("lemon") es true.
  4. Borra lemon. size es 1 y has("lemon") es false.
  5. 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

Listo para Empezar

Pon a Prueba tu Conocimiento

Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema

❓
4
Preguntas
🎯
70%
Para Aprobar
♾️
∞
Tiempo
🔄
∞
Intentos

📝 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