É possível usar literais de objeto para armazenar pares de chave-valor e matrizes para armazenar coleções iteráveis de valores. O ES6 também introduz estruturas de dados especializadas para se adequar a casos de uso mais granulares: mapear para pares de valor-chave e definir para valores individuais.
Mapa
Um mapa é uma estrutura de dados iterável que armazena informações como pares de chave-valor, semelhante a um literal de objeto. Ao contrário dos literais de objetos, um Map permite os dois valores e para ter qualquer tipo de dados, e os elementos de ordem são adicionados a um Mapa é preservados ao iterar sobre eles.
Para criar um mapa, use o construtor Map()
:
const myMap = new Map();
myMap;
> Map(0)
Você pode pré-preencher um mapa com dados usando uma sintaxe semelhante a uma matriz (ou qualquer objeto iterador) que contém objetos do tipo matriz compostos por dois elementos. O primeiro elemento em cada um desses de dois elementos se torna a chave, enquanto o segundo se torna o valor. associado à chave. A forma mais simples disso é, na prática, uma matriz no qual cada elemento é uma matriz composta de dois elementos, a chave e o do elemento a ser adicionado ao mapa:
const myMap = new Map([
[ "myKey", "A string value" ],
[ "mySecondKey", 500 ],
[ "myThirdKey", true ]
]);
myMap;
> Map(3) {'myKey' => 'A string value', 'mySecondKey' => 500, 'myThirdKey' => true}
Novamente, um objeto Map difere de um literal de objeto porque ambos os valores E as chaves podem assumir qualquer tipo e valor de dados:
const notAFunction = () => console.log( "function" );
const myMap = new Map([
[ null, 0 ],
[ false, "This is false" ],
[ undefined, "No defined value" ],
[ NaN, "Not a number" ]
]);
myMap;
> Map(4) {null => 0, false => 'This is false', undefined => 'No defined value', NaN => 'Not a number'}
Para recuperar, definir ou excluir elementos do mapa, use os métodos herdados da Map
.
construtor:
const myMap = new Map();
myMap;
> Map(0)
myMap.set( "myKey", "My value." );
myMap.has( "myKey" );
> true
myMap.get( "myKey" );
"My value."
myMap.delete( "myKey" );
myMap;
> Map(0)
As chaves em um mapa são únicas, o que significa que definir uma chave idêntica substitui a par de chave-valor armazenado anteriormente:
const myMap = new Map([ [ "myKey", "A string value" ] ]);
myMap.set( "myKey", 500 );
myMap;
> Map(1) {'myKey' => 500}
Assim como nos objetos, você pode atribuir um mapa a uma variável declarada com const
e
e modificar esse mapa. No entanto, assim como em outros casos de uso de const
, não é possível
alterar ou excluir a própria variável:
const myMap = new Map();
myMap.set( "myKey", "A string value" );
myMap;
> Map(1) {'myKey' => 500}
WeakMap
Um WeakMap é um mapa que contém "fraco" referências, que devem ser referências a objetos ou símbolos que não foram adicionados ao registro de símbolos global.
Para criar um WeakMap, use o construtor WeakMap()
:
const myWeakMap = new WeakMap();
myWeakMap;
> WeakMap(0)
A sintaxe WeakMap é semelhante à Map, mas WeakMaps não são iterable e tentando usar qualquer valor diferente de um objeto ou símbolo como chave causa um erro de sintaxe. Quando não referências a uma chave existem fora do WeakMap, esse objeto ou símbolo e o valor associado no WeakMap, ambos são qualificados para a coleta de lixo.
Isso permite casos de uso como o armazenamento de metadados associados a um objeto em um WeakMap, usando a referência ao objeto como a chave. Se nenhuma outra referência existir a esse objeto e ele for removido da memória, o evento também são removidos.
Definir
Um conjunto é uma coleção iterável de valores exclusivos um pouco semelhante a uma matriz, embora um conjunto possa conter apenas valores exclusivos. Assim como em um mapa, iterar em um O conjunto preserva a ordem em que os elementos foram adicionados.
Para criar um conjunto, use o construtor Set()
:
const mySet = new Set();
mySet;
> Set []
Você também pode criar um conjunto com base em um literal de matriz:
const mySet = new Set([ 1, 2, 3 ]);
mySet;
> Set(3) [ 1, 2, 3 ]
Como um conjunto não permite elementos duplicados, quando um conjunto é criado a partir de um que contém várias instâncias do mesmo valor, ela retém apenas a primeira desse valor:
const mySet = new Set([ 1, 2, 3, 2 ]);
mySet;
> Set(3) [ 1, 2, 3 ]
Para adicionar ou remover elementos de um conjunto, use os métodos herdados de Set
.
construtor. Esses métodos agem sobre um elemento com base no valor dele
em vez de referenciar um índice:
const mySet = new Set();
mySet.add( "My value." );
mySet;
> Set [ "My value." ]
mySet.has( "My value." );
> true
mySet.delete( "My value." );
mySet;
> Set []
Embora os conjuntos não sejam coleções indexadas e não se destinam ao uso como Assim, os elementos de um conjunto são iterados na ordem de inserção. As tentativas de adicionar um valor de elemento duplicado a um Set são pulado, preservando o pedido de inserção original:
const mySet = new Set([ 1, 2, 3 ]);
mySet;
> Set(3) [ 1, 2, 3 ]
mySet.add( 2 );
> Set(3) [ 1, 2, 3 ]
Para criar uma matriz com base em um conjunto, use o método Array.from()
ou
sintaxe:
const mySet = new Set([ 1, 2, 3 ]);
const myArray = Array.from( mySet );
myArray;
> Array(3) [ 1, 2, 3 ]
[ ...mySet ];
> Array(3) [ 1, 2, 3 ]
WeakSet
WeakSet é um conjunto que contém apenas valores de coleta de lixo, como referências a objetos ou Símbolos que não foram adicionados ao registro de símbolos global.
Para criar um WeakSet, use o construtor WeakSet()
:
const myWeakSet = new WeakSet();
myWeakSet;
> WeakSet []
A sintaxe WeakSet é semelhante a Set, embora um WeakSet não seja iterable e tentando adicionar qualquer valor diferente de um objeto ou símbolo causa um erro de sintaxe. Assim como no WeakMap, quando nenhuma outra referência a um valor referenciado por um WeakSet, esse valor se torna qualificado para coleta de lixo.
Isso permite casos de uso como a agregação de uma única coleção iterável de objetos relacionados. Se não houver outras referências a um objeto referenciado pelo WeakSet, o elemento associado também será removido do WeakSet.
Teste seu conhecimento
Considere o seguinte:
const myMap = new Map([ [ "myKey", "My string" ] ]); myMap.set( "myKey", 100 );
O que o myMap
retorna?
undefined
"My string"
100