ES6 - Coleções

ES6 apresenta duas novas estruturas de dados: Mapas e Conjuntos.

  • Maps - Essa estrutura de dados permite mapear uma chave para um valor.

  • Sets- Os conjuntos são semelhantes aos arrays. No entanto, os conjuntos não incentivam duplicatas.

Mapas

O objeto Map é um par simples de chave / valor. Chaves e valores em um mapa podem ser primitivos ou objetos.

A seguir está a sintaxe para o mesmo.

new Map([iterable])

O parâmetro iterable representa qualquer objeto iterável cujos elementos compreendem um par chave / valor. Os mapas são ordenados, ou seja, eles percorrem os elementos na ordem de sua inserção.

Propriedades do mapa

Sr. Não Descrição da Propriedade
1 Map.prototype.size

Esta propriedade retorna o número de pares chave / valor no objeto Map.

Compreender as operações básicas do mapa

A função set () define o valor da chave no objeto Map. A função set () leva dois parâmetros, a saber, a chave e seu valor. Esta função retorna o objeto Map.

A função has () retorna um valor booleano que indica se a chave especificada é encontrada no objeto Map. Esta função recebe uma chave como parâmetro.

var map = new Map(); 
map.set('name','Tutorial Point'); 
map.get('name'); // Tutorial point

O exemplo acima cria um objeto de mapa. O mapa possui apenas um elemento. A chave do elemento é denotada porname. A chave é mapeada para um valorTutorial point.

Note- Os mapas distinguem entre valores semelhantes, mas contêm diferentes tipos de dados. Em outras palavras, uminteger key 1 é considerado diferente de um string key “1”. Considere o seguinte exemplo para entender melhor este conceito

var map = new Map(); 
map.set(1,true); 
console.log(map.has("1")); //false 
map.set("1",true); 
console.log(map.has("1")); //true

Resultado

false 
true

o set()método também pode ser encadeado. Considere o seguinte exemplo.

var roles = new Map(); 
roles.set('r1', 'User') 
.set('r2', 'Guest') 
.set('r3', 'Admin'); 
console.log(roles.has('r1'))

Resultado

True

O exemplo acima define um objeto de mapa. O exemplo encadeia a função set () para definir o par chave / valor.

o get() função é usada para recuperar o valor correspondente à chave especificada.

O construtor Map também pode receber uma matriz. Além disso, o mapa também suporta o uso do operador de propagação para representar uma matriz.

Exemplo

var roles = new Map([ 
   ['r1', 'User'], 
   ['r2', 'Guest'], 
   ['r3', 'Admin'], 
]);  
console.log(roles.get('r2'))

A seguinte saída é exibida na execução bem-sucedida do código acima.

Guest

Note - A função get () retorna indefinido se a chave especificada não existe no mapa.

O set () substitui o valor da chave, se ela já existir no mapa. Considere o seguinte exemplo.

var roles = new Map([ 
   ['r1', 'User'], 
   ['r2', 'Guest'], 
   ['r3', 'Admin'], 
]);  
console.log(`value of key r1 before set(): ${roles.get('r1')}`) 
roles.set('r1','superUser') 
console.log(`value of key r1 after set(): ${roles.get('r1')}`)

A seguinte saída é exibida na execução bem-sucedida do código acima.

value of key r1 before set(): User 
value of key r1 after set(): superUser

Métodos de Mapa

Sr. Não Método e Descrição
1 Map.prototype.clear ()

Remove todos os pares de chave / valor do objeto Map.

2 Map.prototype.delete (chave)

Remove qualquer valor associado à chave e retorna o valor que Map.prototype.has (chave) teria retornado anteriormente.

Map.prototype.has (chave) retornará falso posteriormente.

3 Map.prototype.entries ()

Retorna um novo objeto Iterator que contém an array of [chave, valor] para cada elemento no objeto Mapa na ordem de inserção.

4 Map.prototype.forEach (callbackFn [, thisArg])

Ligações callbackFnuma vez para cada par de valores-chave presente no objeto Map, na ordem de inserção. Se um parâmetro thisArg for fornecido para forEach, ele será usado como o valor 'this' para cada retorno de chamada.

5 Map.prototype.keys ()

Retorna um novo objeto Iterator que contém o keys para cada elemento no objeto Mapa na ordem de inserção.

6 Map.prototype.values ​​()

Retorna um novo objeto Iterator que contém an array of [chave, valor] para cada elemento no objeto Mapa na ordem de inserção.

O para ... de Loop

O exemplo a seguir ilustra a passagem de um mapa usando o loop for ... of.

'use strict' 
var roles = new Map([ 
   ['r1', 'User'], 
   ['r2', 'Guest'], 
   ['r3', 'Admin'], 
]);
for(let r of roles.entries()) 
console.log(`${r[0]}: ${r[1]}`);

A seguinte saída é exibida na execução bem-sucedida do código acima.

r1: User 
r2: Guest 
r3: Admin

Mapas Fracos

Um mapa fraco é idêntico a um mapa com as seguintes exceções -

  • Suas chaves devem ser objetos.

  • As chaves em um mapa fraco podem ser coletadas como lixo. Garbage collection é um processo de limpar a memória ocupada por objetos não referenciados em um programa.

  • Um mapa fraco não pode ser iterado ou apagado.

Exemplo: Mapa Fraco

'use strict' 
let weakMap = new WeakMap(); 
let obj = {}; 
console.log(weakMap.set(obj,"hello"));  
console.log(weakMap.has(obj));// true

A seguinte saída é exibida na execução bem-sucedida do código acima.

WeakMap {} 
true

Jogos

Um conjunto é uma estrutura de dados ES6. É semelhante a uma matriz, com a exceção de que não pode conter duplicatas. Em outras palavras, permite armazenar valores únicos. Os conjuntos oferecem suporte a valores primitivos e referências a objetos.

Assim como os mapas, os conjuntos também são ordenados, ou seja, os elementos são iterados em sua ordem de inserção. Um conjunto pode ser inicializado usando a seguinte sintaxe.

Definir propriedades

Sr. Não Descrição da Propriedade
1 Set.prototype.size

Retorna o número de valores no objeto Set.

Definir métodos

Sr. Não Método e Descrição
1 Set.prototype.add (valor)

Anexa um novo elemento com o valor fornecido ao objeto Set. Retorna o objeto Set.

2 Set.prototype.clear ()

Remove todos os elementos do objeto Set.

3 Set.prototype.delete (valor)

Remove o elemento associado ao valor.

4 Set.prototype.entries ()

Retorna um novo objeto Iterator que contém an array of[valor, valor] para cada elemento no objeto Definir, na ordem de inserção. Ele é mantido semelhante ao objeto Map, de modo que cada entrada tem o mesmo valor para sua chave e valor aqui.

5 Set.prototype.forEach (callbackFn [, thisArg])

Ligações callbackFnuma vez para cada valor presente no objeto Set, na ordem de inserção. E seathisArg parâmetro é fornecido para forEach, ele será usado como o valor 'this' para cada retorno de chamada.

6 Set.prototype.has (valor)

Retorna um booleano que afirma se um elemento está presente com o valor fornecido no objeto Set ou não.

7 Set.prototype.values ​​()

Retorna um novo objeto Iterator que contém o values para cada elemento no objeto Definir no pedido de inserção.

Conjunto Fraco

Conjuntos fracos podem conter apenas objetos, e os objetos que eles contêm podem ser coletados como lixo. Como mapas fracos, conjuntos fracos não podem ser iterados.

Exemplo: usando um conjunto fraco

'use strict' 
   let weakSet = new WeakSet();  
   let obj = {msg:"hello"}; 
   weakSet.add(obj); 
   console.log(weakSet.has(obj)); 
   weakSet.delete(obj); 
   console.log(weakSet.has(obj));

A seguinte saída é exibida na execução bem-sucedida do código acima.

true 
false

Iterator

Iterator é um objeto que permite acessar uma coleção de objetos um de cada vez. Tanto set quanto map possuem métodos que retornam um iterador.

Iteradores são objetos com next()método. Quando o método next () é invocado, ele retorna um objeto com'value' e 'done'propriedades. 'done' é booleano, retornará verdadeiro após a leitura de todos os itens da coleção

Exemplo 1: conjunto e iterador

var  set = new Set(['a','b','c','d','e']);  
var iterator = set.entries(); 
console.log(iterator.next())

A seguinte saída é exibida na execução bem-sucedida do código acima.

{ value: [ 'a', 'a' ], done: false }

Como o conjunto não armazena chave / valor, a matriz de valor contém chave e valor semelhantes. feito será falso porque há mais elementos a serem lidos.

Exemplo 2: conjunto e iterador

var  set = new Set(['a','b','c','d','e']);  
var iterator = set.values(); 
console.log(iterator.next());

A seguinte saída é exibida na execução bem-sucedida do código acima.

{ value: 'a', done: false }

Exemplo 3: conjunto e iterador

var  set = new Set(['a','b','c','d','e']);  
var iterator = set.keys(); 
console.log(iterator.next());

A seguinte saída é exibida na execução bem-sucedida do código acima.

{ value: 'a', done: false }

Exemplo 4: Mapa e Iterador

var map = new Map([[1,'one'],[2,'two'],[3,'three']]); 
var iterator = map.entries(); 
console.log(iterator.next());

A seguinte saída é exibida na execução bem-sucedida do código acima.

{ value: [ 1, 'one' ], done: false }

Exemplo 5: Mapa e Iterador

var map = new Map([[1,'one'],[2,'two'],[3,'three']]); 
var iterator = map.values(); 
console.log(iterator.next());

A seguinte saída é exibida na execução bem-sucedida do código acima.

{value: "one", done: false}

Exemplo 6: Mapa e Iterador

var map = new Map([[1,'one'],[2,'two'],[3,'three']]); 
var iterator = map.keys(); 
console.log(iterator.next());

A seguinte saída é exibida na execução bem-sucedida do código acima.

{value: 1, done: false}