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 {{…}, {…}}