| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Keyed_collections | [Back] [Original] |
Get to know MDN better
Esta pgina ha sido traducida del ingls por la comunidad. Aprende ms y nete a la comunidad de MDN Web Docs.
Este captulo presenta colecciones de datos que estn indexadas por una clave; los objetos Map y Set contienen elementos que son iterables en el orden de insercin.
mapECMAScript 2015 introduce una nueva estructura de datos para asociar claves con valores. Un objeto Map es un mapa de clave/valor simple y puedes iterar sobre sus elementos en el orden en que fueron insertados.
El siguiente cdigo muestra algunas operaciones bsicas con un Map. Consulta tambin la pgina de referencia de Map para obtener ms ejemplos y la API completa. Puedes usar un bucle for...of para devolver un arreglo de [key, value] para cada iteracin.
let sayings = new Map();
sayings.set("dog", "woof");
sayings.set("cat", "meow");
sayings.set("elephant", "toot");
sayings.size; // 3
sayings.get("dog"); // woof
sayings.get("fox"); // undefined
sayings.has("bird"); // false
sayings.delete("dog");
sayings.has("dog"); // false
for (let [key, value] of sayings) {
console.log(key + " goes " + value);
}
// "cat goes meow"
// "elephant goes toot"
sayings.clear();
sayings.size; // 0
Object y mapTradicionalmente, los objetos se han utilizado para asignar cadenas a valores. Los objetos te permiten establecer claves a valores, recuperar esos valores, eliminar claves y detectar si algo est almacenado en una clave. Los objetos Map, sin embargo, tienen algunas ventajas ms que los hacen mejores mapas.
Object son Cadenas o Smbolos, donde pueden tener cualquier valor para un Map.size de un Map fcilmente, mientras que tienes que realizar un seguimiento manual del tamao de un Object.Object tiene un prototipo, por lo que hay claves predeterminadas en el mapa. (Esto se puede omitir usando map = Object.create(null)).Estos tres consejos te pueden ayudar a decidir si usar un Map o un Object:
WeakMapEl objeto WeakMap es una coleccin de pares clave/valor en la que las claves solo son objetos y los valores pueden ser valores arbitrarios. Las referencias de objeto en las claves se mantienen dbilmente, lo que significa que son un objetivo de recoleccin de basura (GC por Garbage Collection) si ya no hay otra referencia al objeto. La API de WeakMap es la misma que la API de Map.
Una diferencia con los objetos Map es que las claves en WeakMap no son enumerables (es decir, no hay ningn mtodo que te proporcione una lista de las claves). Si lo hubiera, la lista dependera del estado de la recoleccin de basura, introduciendo el no determinismo.
Para obtener ms informacin y cdigo de ejemplo, consulta tambin "Por qu mapa Dbil?" en la pgina de referencia de WeakMap.
Un caso de uso de los objetos WeakMap es almacenar datos privados para un objeto u ocultar detalles de implementacin. El siguiente ejemplo es de la publicacin del blog de Nick Fitzgerald "Ocultar detalles de implementacin con WeakMaps de ECMAScript 6". Los datos y mtodos privados pertenecen al objeto y se almacenan en privates del objeto WeakMap. Todo lo expuesto en la instancia y el prototipo es pblico; todo lo dems es inaccesible desde el mundo exterior porque privates no se exporta desde el mdulo.
const privates = new WeakMap();
function Public() {
const me = {
// Los datos privados van aqu
};
privates.set(this, me);
}
Public.prototype.method = function () {
const me = privates.get(this);
// Hacer cosas con datos privados en `me`...
};
module.exports = Public;
SetsSetLos objetos Set son colecciones de valores. Puedes iterar sus elementos en el orden en que se insertaron. Un valor en un Set solo puede aparecer una vez; es nico en la coleccin del Set.
El siguiente cdigo muestra algunas operaciones bsicas con un Set. Adems, consulta la pgina de referencia de Set para obtener ms ejemplos y la API completa.
let mySet = new Set();
mySet.add(1);
mySet.add("algn texto");
mySet.add("foo");
mySet.has(1); // true
mySet.delete("foo");
mySet.size; // 2
for (let item of mySet) console.log(item);
// 1
// "algn texto"
SetPuedes crear un Array a partir de un Set usando Array.from o el operador de propagacin. Adems, el constructor Set acepta un Array para convertirlo en la otra direccin.
Nota:
Recuerda que los objetos Set almacenan valores nicos, por lo que cualquier elemento duplicado de un arreglo se elimina al realizar la conversin.
Array.from(mySet);
[...mySet2];
mySet2 = new Set([1, 2, 3, 4]);
Array y SetTradicionalmente en muchas situaciones, un conjunto de elementos se ha almacenado en arreglos de JavaScript. Sin embargo, el nuevo objeto Set tiene algunas ventajas:
Array por valor (arr.splice(arr.indexOf(val), 1)) es muy lento.Set te permiten eliminar elementos por su valor. Con un arreglo, tendras que empalmar (con splice) en funcin del ndice de un elemento.NaN no se puede encontrar con indexOf en un arreglo.Set almacenan valores nicos. No es necesario que realices un seguimiento manual de los duplicados.WeakSetLos objetos WeakSet son colecciones de objetos. Un objeto en el WeakSet solo puede aparecer una vez. Es nico en la coleccin WeakSet y los objetos no son enumerables.
Las principales diferencias con el objeto Set son:
Sets, los WeakSets son colecciones nicamente de objetos y no de valores arbitrarios de cualquier tipo.WeakSet es dbil: Las referencias a los objetos de la coleccin se mantienen dbiles. Si no hay otra referencia a un objeto almacenado en el WeakSet, pueden ser recolectados como basura. Eso tambin significa que no hay una lista de objetos actualmente almacenados en la coleccin. Los WeakSets no se pueden enumerar.Los casos de uso de los objetos WeakSet son limitados. No perdern memoria, por lo que puede ser seguro usar elementos DOM como clave y marcarlos con fines de seguimiento, por ejemplo.
Map y SetTanto la igualdad de claves de los objetos Map como la igualdad de valores de los objetos Set se basan en "algoritmo del mismo valor cero":
===.-0 y +0 se consideran iguales.NaN se considera igual a s mismo (al contrario de ===).This page was last modified on 29 may 2026 by MDN contributors.
Your blueprint for a better internet.
Portions of this content are 19982026 by individual mozilla.org contributors. Content available under a Creative Commons license.
| Web Proxy Viewer | New URL | Original Page |