ES6 - Mapas e Conjuntos

ES6 apresenta duas novas estruturas de dados - maps e sets. Vamos aprender mais sobre eles.

Mapas

Um mapa é uma coleção ordenada de key-value pairs. Mapas são semelhantes a objetos. No entanto, existem algumas diferenças entre mapas e objetos. Eles estão listados abaixo -

Sr. Não Objeto Mapa
1 As chaves não podem ser do tipo objeto As chaves podem ser de qualquer tipo
2 Chaves não encomendadas Chaves são encomendadas
3 não iterável iterável

Sintaxe

A sintaxe para Map é fornecida abaixo -

let map = new Map([iterable])
let map = new Map()

Exemplo

O exemplo a seguir cria um mapa usando um construtor iterável -

<script>
   let andy = {ename:"Andrel"},
      varun = {ename:"Varun"},
      prijin = {ename:"Prijin"}
   let empJobs = new Map([
   [andy,'Software Architect'],
   [varun,'Developer']]
   );
   console.log(empJobs)
</script>

A saída do código acima é mostrada abaixo -

{{…} => "Software Architect", {…} => "Developer"}

Verificando o tamanho do mapa

A propriedade size pode ser usada para determinar o número de valores armazenados no mapa.

Sintaxe

A sintaxe para verificar o tamanho do mapa é fornecida abaixo -

map_name.size

Exemplo

<script>
   let daysMap = new Map();
   daysMap.set('1', 'Monday');
   daysMap.set('2', 'Tuesday');
   daysMap.set('3', 'Wednesday');
   console.log(daysMap.size);
</script>

A saída do código acima é mostrada abaixo -

3

A seguir estão alguns métodos comuns que podem ser usados ​​para manipular mapas -

Sr. Não Objeto e Mapa
1 definir (chave, valor)

Adiciona chave e valor ao mapa

2 obter (chave)

Retorna o valor se a chave for correspondida

3 tem (chave)

Retorna verdadeiro se existir um elemento com a chave especificada; senão retorna falso

4 chaves()

Retorna um iterador que contém as chaves de cada elemento no objeto de mapa

5 valores ()

Retorna um iterador que contém os valores de cada elemento no objeto de mapa

6 entradas ()

Retorna um iterador que contém os pares de valores-chave para cada elemento no Mapa

7 deletar (chave)

Remove o elemento especificado de um objeto Map

WeakMap

WeakMap é um pequeno subset of map. As chaves são fracamente referenciadas, portanto, podem ser apenas não primitivas. Se não houver referência às chaves do objeto, ele estará sujeito à coleta de lixo.

  • não iterável
  • cada chave é o tipo de objeto

O WeakMap permitirá a coleta de lixo se a chave não tiver referência.

Sintaxe

A sintaxe para WeakMap é declarada abaixo -

new WeakMap([iterable])

Exemplo 1

<script>
   let emp = new WeakMap();
   emp.set(10,'Sachin');// TypeError as keys should be object
</script>

Exemplo 2

<script>
   let empMap = new WeakMap();
   // emp.set(10,'Sachin');// Error as keys should be object
   let e1= {ename:'Kiran'},
      e2 = {ename:'Kannan'},
      e3 = {ename:'Mohtashim'}

   empMap.set(e1,1001);
   empMap.set(e2,1002);
   empMap.set(e3,1003);

   console.log(empMap)
   console.log(empMap.get(e2))
   console.log(empMap.has(e2))
   empMap.delete(e1)
   console.log(empMap)
</script>

A saída do código acima é conforme mencionado abaixo -

{{…} => 1002, {…} => 1003, {…} => 1001}
1002
true
{{…} => 1002, {…} => 1003}

Conjunto

Um conjunto é uma coleção não ordenada de valores únicos. Essa estrutura de dados pode conter valores de tipos primitivos e de objeto.

Sintaxe

A sintaxe para Set é fornecida abaixo -

new Set([iterable])
new Set()

Exemplo

<script>
   let names = new Set(['A','B','C','D']);
   console.log(names)
</script>

A saída do código acima é a seguinte -

{"A", "B", "C", "D"}

Verificar o tamanho de um conjunto

A propriedade size do objeto Set pode ser usada para consultar o número de elementos no Set.

Sintaxe

A sintaxe para verificar o tamanho de um conjunto é mencionada abaixo -

set.size

Exemplo

<script>
   let names = new Set(['A','B','C','D']);
   console.log(names.size)
</script>

A saída do código acima é a seguinte -

4

Iterando um Conjunto

Podemos usar o forEach e for..ofloops para iterar por meio de um conjunto. Isso é mostrado no exemplo abaixo -

Exemplo

<script>
   let names= new Set(['A','B','C','D']);
   //iterate using forEach
   console.log('forEach')
   names.forEach(n=>console.log(n))
   
   console.log('for of..')
   
   //iterate using for..of
   for(let n of names){
      console.log(n)
   }
</script>

A saída do código acima é conforme mencionado abaixo -

forEach
A
B
C
D
for of..
A
B
C
D

Os seguintes métodos podem ser usados ​​para manipular um conjunto -

Sr. Não Objeto e Mapa
1 adicionar (elemento)

Adiciona um elemento ao conjunto

2 tem (elemento)

Retorna verdadeiro se o elemento for encontrado; senão retorna falso

3 deletar (elemento)

Exclua um elemento específico do Conjunto

4 Claro()

Limpa todos os elementos do Conjunto

WeakSet

Um Weakset retém objetos fracamente, o que significa que os objetos armazenados em um WeakSet estão sujeitos à coleta de lixo, se não forem referenciados. WeakSets não são iteráveis ​​e não têmget método.

<script>

   let e1 = {ename:'A'}
   let e2 ={ename:'B'}
   let e3 ={ename:'C'}

   let emps = new WeakSet();
   emps.add(e1);
   emps.add(e2)
   .add(e3);

   console.log(emps)
   console.log(emps.has(e1))
   emps.delete(e1);
   console.log(emps)
</script>

A saída do código acima será conforme mencionado abaixo -

WeakSet {{…}, {…}, {…}}
true
WeakSet {{…}, {…}}