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}