[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Guide/Keyed_collections [Back]  [Original]

Colees chaveadas - JavaScript | MDN

Esta pgina foi traduzida do ingls pela comunidade. Saiba mais e junte-se comunidade MDN Web Docs.

View in English Always switch to English

Colees chaveadas

Este captulo apresenta colees de dados que so ordenados por uma chave; Objetos Map e Set contm elementos que so iterveis em ordem de insero.

In this article

Mapas

Objeto Map

ECMAScript 6 apresenta uma nova estrutura de dados para mapear valores para valores. Um objeto Map um simples mapa de chave/valor que pode ter seus elementos iterados por ordem de insero.

O cdigo a seguir mostra algumas operaes bsicas com um Map. Veja tambm a pgina de referncia do Map para mais exemplos e a API completa. Voc pode usar um lao for...of para retornar um array de [chave, valor] para cada iterao.

js
var sayings = new Map();
sayings.set("dog", "woof");
sayings.set("cat", "meow");
sayings.set("elephant", "toot");
sayings.size; // 3
sayings.get("fox"); // undefined
sayings.has("bird"); // false
sayings.delete("dog");
sayings.has("dog"); // false

for (var [key, value] of sayings) {
  console.log(key + " goes " + value);
}
// "cat goes meow"
// "elephant goes toot"

sayings.clear();
sayings.size; // 0

Object e Map comparados

Tradicionalmente, objetos tem sido usado para mapear strings para valores. Objetos permitem que voc defina chaves para valores, recupere esses valores, exclua chaves e detecte se algo est armazenado em uma chave. Objetos Map, contudo, possuem algumas vantagens que os tornam mapas melhores.

  • As chaves de um Objeto so Strings, onde elas podem ser de qualquer valor para um Map.
  • Voc pode obter o tamanho de um Map facilmente enquanto que para um Object, voc tem que obter manualmente o seu tamanho.
  • A iterao de mapas por ordem de insero dos elementos.
  • Um Object tem um prottipo, ento existem chaves padro no mapa. (este pode ser ignorado usando map = Object.create(null)).

Estes dois tipos podem ajudar voc a decidir se usa um Map ou um Object:

  • Use mapas sobre objetos quando as chaves forem desconhecidas at a execuo, e quando todas as chaves so do mesmo tipo e todos valores so do mesmo tipo.
  • Use mapas caso haja a necessidade de armazenar valores primitivos como chaves, porque objetos tratam cada chave como uma string ou um valor numrico, valor booleano ou qualquer outro valor primitivo.
  • Use objetos quando h uma lgica que opera em elementos individuais.

Objeto WeakMap

O objeto WeakMap uma coleo de pares de chave/valor em que as chaves so somente objetos e seus valores podem ser valores arbitrrios. As referncias do objeto nas chaves so fracamente mantidas, isso significa que eles so alvo da garbage collection (coleta de lixo) se no houver nenhuma outra referncia para o objeto. A API WeakMap a mesma API do Map.

Uma diferena para objetos Map que chaves WeakMap no so enumerveis (isto , no h um mtodo que d a voc uma lista de chaves). Se eles fossem, a lista dependeria do estado da coleta de lixo, introduzindo um no-determinismo.

Para mais informaes e cdigo de exemplo, veja tambm "Por qu WeakMap?" na pgina de referncia WeakMap.

Um caso de uso de objetos WeakMap armazenar dados privados para um objeto ou ocultar detalhes de implementao. O exemplo a seguir Nick Fitzgerald a partir de um post "Ocultando detalhes de implementao com WeakMaps ECMAScript 6" em seu blog. Os dados privados e mtodos pertencem ao objeto e so armazenados nos objetos WeakMap privados. Tudo exposto na instncia e o prottipo pblico, todo o restante inacessvel a partir do mundo externo por que privado no exportado pelo mdulo.

js
const privates = new WeakMap();

function Public() {
  const me = {
    // Dados privados vem aqui
  };
  privates.set(this, me);
}

Public.prototype.method = function () {
  const me = privates.get(this);
  // Faa coisas com dado privado em `me`...
};

module.exports = Public;

Conjuntos

Objeto Set

Objetos Set so colees de valores. Voc pode iterar seus elementos em ordem de insero. Um valor em um Set s pode ocorrer uma vez; ele nico em uma coleo Set.

O cdigo a seguir mostra algumas operaes bsicas com um Set. Veja tambm a pgina de referncia Set para mais exemplos e a API completa.

js
var mySet = new Set();
mySet.add(1);
mySet.add("some text");
mySet.add("foo");

mySet.has(1); // true
mySet.delete("foo");
mySet.size; // 2

for (let item of mySet) console.log(item);
// 1
// "some text"

Converso entre Array e Set

Voc pode criar um Array a partir de um Set usando Array.from ou o operador de propagao. Alm disso, o construtor Set aceita um Array para converter em outra direo. Observe novamente que objetos Set armazenam valores nicos, ento quaisquer elementos duplicados de um Array so excludos quando convertidos.

js
Array.from(mySet);
[...mySet2];

mySet2 = new Set([1, 2, 3, 4]);

Array e Set comparados

Tradicionalmente, um conjunto de elementos tem sido armazenados em arrays JavaScript em muitas situaes. O novo objeto Set, contudo, tem algumas vantagens:

  • Checar se um elemento existe em uma coleo usando indexOf para arrays lento.
  • Objetos Set permitem que voc exclua elementos por seu valor. Com um array voc teria que unir baseado no ndice do elemento.
  • O valor NaN no pode ser encontrado com indexOf no array.
  • Objetos Set armazenam valores nicos, voc no tem que manter o controle de duplicidades manualmente por voc mesmo.

Objeto WeakSet

Objetos WeakSet so colees de objetos. Um objeto no WeakSet s pode ocorrer uma vez; Isto nico em colees WeakSet e objetos no so enumerveis.

As principais diferenas para objetos Set so:

  • Em contraste com Sets, WeakSets so apenas colees de objetos e no de valores arbritrios de qualquer tipo.
  • O WeakSet fraco: Referncias para objetos so fracamente realizadas na coleo. Se no h outra referncia para um objeto armazenado no WeakSet, eles podem ser coletados pelo coletor de lixo. Isso significa tambm que no h uma lista de objetos correntes armazenados na coleo. WeakSets no so enumerveis.

Os casos de uso do objeto WeakSet so limitados. Eles no vo desperdiar memria para ser seguro o uso de elementos DOM como chaves e marc-los para propsitos de controle, por exemplo.

Igualdade de chave e valor do Map and Set

Ambos, a igualdade de chaves de objetos Map e a igualdade de valor de objetos Set, so baseados no "algoritmo mesmo valor de zero":

  • Igualdade funciona como o operador de comparao de identidade ===.
  • -0 e +0 so considerados iguais.
  • NaN considerado igual a ela mesmo (contrrio de ===).

Web Proxy Viewer  |  New URL  |  Original Page