Movatterモバイル変換


[0]ホーム

URL:


  1. Tecnología web para desarrolladores
  2. JavaScript
  3. Guía de JavaScript
  4. Colecciones con clave

Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.

View in EnglishAlways switch to English

Colecciones con clave

Este capítulo presenta colecciones de datos que están indexadas por una clave; los objetosMap ySet contienen elementos que son iterables en el orden de inserción.

Mapas

Objetomap

ECMAScript 2015 introduce una nueva estructura de datos para asociar claves con valores. Un objetoMap es un mapa de clave/valor simple y puedes iterar sobre sus elementos en el orden en que fueron insertados.

El siguiente código muestra algunas operaciones básicas con unMap. Consulta también la página de referencia deMap para obtener más ejemplos y la API completa. Puedes usar un buclefor...of para devolver un arreglo de[key, value] para cada iteración.

js
let sayings = new Map();sayings.set("dog", "woof");sayings.set("cat", "meow");sayings.set("elephant", "toot");sayings.size; // 3sayings.get("dog"); // woofsayings.get("fox"); // undefinedsayings.has("bird"); // falsesayings.delete("dog");sayings.has("dog"); // falsefor (let [key, value] of sayings) {  console.log(key + " goes " + value);}// "cat goes meow"// "elephant goes toot"sayings.clear();sayings.size; // 0

CompararObject ymap

Tradicionalmente, losobjetos 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 objetosMap, sin embargo, tienen algunas ventajas más que los hacen mejores mapas.

  • Las claves de unObject sonCadenas oSímbolos, donde pueden tener cualquier valor para unMap.
  • Puedes obtener elsize de unMap fácilmente, mientras que tienes que realizar un seguimiento manual del tamaño de unObject.
  • La iteración de mapas está en el orden de inserción de los elementos.
  • UnObject tiene un prototipo, por lo que hay claves predeterminadas en el mapa. (Esto se puede omitir usandomap = Object.create(null)).

Estos tres consejos te pueden ayudar a decidir si usar unMap o unObject:

  • Usa mapas sobre objetos cuando las claves sean desconocidas hasta el momento de la ejecución, y cuando todas las claves sean del mismo tipo y todos los valores sean del mismo tipo.
  • Utiliza mapas si es necesario almacenar valores primitivos como claves porque el objeto trata cada clave como una cadena, ya sea un valor numérico, un valor booleano o cualquier otro valor primitivo.
  • Usa objetos cuando haya lógica que opere en elementos individuales.

El objetoWeakMap

El objetoWeakMap es una colección de pares clave/valor en la que lasclaves solo son objetos y los valores pueden ser valores arbitrarios. Las referencias de objeto en las claves se mantienendébilmente, lo que significa que son un objetivo de recolección de basura (GC porGarbage Collection) si ya no hay otra referencia al objeto. La API deWeakMap es la misma que la API deMap.

Una diferencia con los objetosMap es que las claves enWeakMap no son enumerables (es decir, no hay ningún método que te proporcione una lista de las claves). Si lo hubiera, la lista dependería del estado de la recolección de basura, introduciendo el no determinismo.

Para obtener más información y código de ejemplo, consulta también "¿Por qué mapaDébil?" en la página de referencia deWeakMap.

Un caso de uso de los objetosWeakMap es almacenar datos privados para un objeto u ocultar detalles de implementación. El siguiente ejemplo es de la publicación del blog de Nick Fitzgerald"Ocultar detalles de implementación con WeakMaps de ECMAScript 6". Los datos y métodos privados pertenecen al objeto y se almacenan enprivates del objetoWeakMap. Todo lo expuesto en la instancia y el prototipo es público; todo lo demás es inaccesible desde el mundo exterior porqueprivates no se exporta desde el módulo.

js
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;

Sets

El objetoSet

Los objetosSet son colecciones de valores. Puedes iterar sus elementos en el orden en que se insertaron. Un valor en unSet solo puede aparecer una vez; es único en la colección delSet.

El siguiente código muestra algunas operaciones básicas con unSet. Además, consulta la página de referencia deSet para obtener más ejemplos y la API completa.

js
let mySet = new Set();mySet.add(1);mySet.add("algún texto");mySet.add("foo");mySet.has(1); // truemySet.delete("foo");mySet.size; // 2for (let item of mySet) console.log(item);// 1// "algún texto"

Conversión entre arreglo ySet

Puedes crear unArray a partir de unSet usandoArray.from o eloperador de propagación. Además, el constructorSet acepta unArray para convertirlo en la otra dirección.

Nota:Recuerda que los objetosSet almacenanvalores únicos, por lo que cualquier elemento duplicado de un arreglo se elimina al realizar la conversión.

js
Array.from(mySet);[...mySet2];mySet2 = new Set([1, 2, 3, 4]);

CompararArray ySet

Tradicionalmente en muchas situaciones, un conjunto de elementos se ha almacenado en arreglos de JavaScript. Sin embargo, el nuevo objetoSet tiene algunas ventajas:

  • Eliminar elementosArray por valor (arr.splice(arr.indexOf(val), 1)) es muy lento.
  • Los objetosSet te permiten eliminar elementos por su valor. Con un arreglo, tendrías que empalmar (consplice) en función del índice de un elemento.
  • El valorNaN no se puede encontrar conindexOf en un arreglo.
  • Los objetosSet almacenan valores únicos. No es necesario que realices un seguimiento manual de los duplicados.

El objetoWeakSet

Los objetosWeakSet son colecciones de objetos. Un objeto en elWeakSet solo puede aparecer una vez. Es único en la colecciónWeakSet y los objetos no son enumerables.

Las principales diferencias con el objetoSet son:

  • A diferencia de losSets, losWeakSets soncoleccionesúnicamente deobjetos y no de valores arbitrarios de cualquier tipo.
  • ElWeakSet esdébil: Las referencias a los objetos de la colección se mantienen débiles. Si no hay otra referencia a un objeto almacenado en elWeakSet, pueden ser recolectados como basura. Eso también significa que no hay una lista de objetos actualmente almacenados en la colección. LosWeakSets no se pueden enumerar.

Los casos de uso de los objetosWeakSet son limitados. No perderán memoria, por lo que puede ser seguro usar elementos DOM como clave y marcarlos con fines de seguimiento, por ejemplo.

Igualdad de clave y valor deMap ySet

Tanto la igualdad de claves de los objetosMap como la igualdad de valores de los objetosSet se basan en "algoritmo del mismo valor cero":

  • La igualdad funciona como el operador de comparación de identidad===.
  • -0 y+0 se consideran iguales.
  • NaN se considera igual a sí mismo (al contrario de===).

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp