ES6 - Colecciones
ES6 introduce dos nuevas estructuras de datos: mapas y conjuntos.
Maps - Esta estructura de datos permite mapear una clave a un valor.
Sets- Los conjuntos son similares a las matrices. Sin embargo, los conjuntos no fomentan los duplicados.
Mapas
El objeto Mapa es un par clave / valor simple. Las claves y los valores de un mapa pueden ser primitivos u objetos.
A continuación se muestra la sintaxis de la misma.
new Map([iterable])
El parámetro iterable representa cualquier objeto iterable cuyos elementos forman parte de un par clave / valor. Los mapas están ordenados, es decir, atraviesan los elementos en el orden de inserción.
Propiedades del mapa
No Señor | Descripción de propiedad |
---|---|
1 | Map.prototype.size Esta propiedad devuelve el número de pares clave / valor en el objeto Map. |
Comprender las operaciones básicas del mapa
La función set () establece el valor de la clave en el objeto Map. La función set () toma dos parámetros, a saber, la clave y su valor. Esta función devuelve el objeto Mapa.
La función has () devuelve un valor booleano que indica si la clave especificada se encuentra en el objeto Map. Esta función toma una tecla como parámetro.
var map = new Map();
map.set('name','Tutorial Point');
map.get('name'); // Tutorial point
El ejemplo anterior crea un objeto de mapa. El mapa tiene un solo elemento. La clave del elemento se denota porname. La clave se asigna a un valorTutorial point.
Note- Los mapas distinguen entre valores similares pero contienen diferentes tipos de datos. En otras palabras, uninteger key 1 se considera diferente de un string key “1”. Considere el siguiente ejemplo para comprender mejor este concepto
var map = new Map();
map.set(1,true);
console.log(map.has("1")); //false
map.set("1",true);
console.log(map.has("1")); //true
Salida
false
true
los set()El método también es encadenable. Considere el siguiente ejemplo.
var roles = new Map();
roles.set('r1', 'User')
.set('r2', 'Guest')
.set('r3', 'Admin');
console.log(roles.has('r1'))
Salida
True
El ejemplo anterior define un objeto de mapa. El ejemplo encadena la función set () para definir el par clave / valor.
los get() La función se utiliza para recuperar el valor correspondiente a la clave especificada.
Al constructor de mapas también se le puede pasar una matriz. Además, map también admite el uso del operador de propagación para representar una matriz.
Ejemplo
var roles = new Map([
['r1', 'User'],
['r2', 'Guest'],
['r3', 'Admin'],
]);
console.log(roles.get('r2'))
La siguiente salida se muestra en la ejecución exitosa del código anterior.
Guest
Note - La función get () devuelve undefined si la clave especificada no existe en el mapa.
El conjunto () reemplaza el valor de la clave, si ya existe en el mapa. Considere el siguiente ejemplo.
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')}`)
La siguiente salida se muestra en la ejecución exitosa del código anterior.
value of key r1 before set(): User
value of key r1 after set(): superUser
Métodos de mapas
No Señor | Método y descripción |
---|---|
1 | Map.prototype.clear () Elimina todos los pares clave / valor del objeto Mapa. |
2 | Map.prototype.delete (clave) Elimina cualquier valor asociado a la clave y devuelve el valor que Map.prototype.has (clave) habría devuelto previamente. Map.prototype.has (key) devolverá falso después. |
3 | Map.prototype.entries () Devuelve un nuevo objeto Iterator que contiene an array of [clave, valor] para cada elemento del objeto Mapa en el orden de inserción. |
4 | Map.prototype.forEach (callbackFn [, thisArg]) Llamadas callbackFnuna vez para cada par clave-valor presente en el objeto Map, en orden de inserción. Si se proporciona un parámetro thisArg a forEach, se utilizará como el valor 'this' para cada devolución de llamada. |
5 | Map.prototype.keys () Devuelve un nuevo objeto Iterator que contiene el keys para cada elemento del objeto Mapa en el orden de inserción. |
6 | Map.prototype.values () Devuelve un nuevo objeto Iterator que contiene an array of [clave, valor] para cada elemento del objeto Mapa en el orden de inserción. |
El para ... de Loop
El siguiente ejemplo ilustra atravesar un mapa usando el bucle 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]}`);
La siguiente salida se muestra en la ejecución exitosa del código anterior.
r1: User
r2: Guest
r3: Admin
Mapas débiles
Un mapa débil es idéntico a un mapa con las siguientes excepciones:
Sus claves deben ser objetos.
Las claves de un mapa débil se pueden recolectar como basura. Garbage collection es un proceso de borrar la memoria ocupada por objetos sin referencia en un programa.
Un mapa débil no se puede iterar ni borrar.
Ejemplo: mapa débil
'use strict'
let weakMap = new WeakMap();
let obj = {};
console.log(weakMap.set(obj,"hello"));
console.log(weakMap.has(obj));// true
La siguiente salida se muestra en la ejecución exitosa del código anterior.
WeakMap {}
true
Conjuntos
Un conjunto es una estructura de datos ES6. Es similar a una matriz con la excepción de que no puede contener duplicados. En otras palabras, le permite almacenar valores únicos. Los conjuntos admiten tanto valores primitivos como referencias a objetos.
Al igual que los mapas, los conjuntos también están ordenados, es decir, los elementos se iteran en su orden de inserción. Un conjunto se puede inicializar utilizando la siguiente sintaxis.
Establecer propiedades
No Señor | Descripción de propiedad |
---|---|
1 | Set.prototype.size Devuelve el número de valores del objeto Set. |
Establecer métodos
No Señor | Método y descripción |
---|---|
1 | Set.prototype.add (valor) Agrega un nuevo elemento con el valor dado al objeto Set. Devuelve el objeto Set. |
2 | Set.prototype.clear () Elimina todos los elementos del objeto Set. |
3 | Set.prototype.delete (valor) Elimina el elemento asociado al valor. |
4 | Set.prototype.entries () Devuelve un nuevo objeto Iterator que contiene an array of[valor, valor] para cada elemento del objeto Conjunto, en orden de inserción. Esto se mantiene similar al objeto Map, por lo que cada entrada tiene el mismo valor para su clave y valor aquí. |
5 | Set.prototype.forEach (callbackFn [, thisArg]) Llamadas callbackFnuna vez por cada valor presente en el objeto Set, en orden de inserción. SiathisArg Se proporciona el parámetro a forEach, se utilizará como el valor 'this' para cada devolución de llamada. |
6 | Set.prototype.has (valor) Devuelve un booleano que afirma si un elemento está presente con el valor dado en el objeto Set o no. |
7 | Set.prototype.values () Devuelve un nuevo objeto Iterator que contiene el values para cada elemento del objeto Set en orden de inserción. |
Conjunto débil
Los conjuntos débiles solo pueden contener objetos, y los objetos que contienen pueden ser recolectados de basura. Al igual que los mapas débiles, los conjuntos débiles no se pueden iterar.
Ejemplo: usar un conjunto débil
'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));
La siguiente salida se muestra en la ejecución exitosa del código anterior.
true
false
Iterador
Iterator es un objeto que permite acceder a una colección de objetos de uno en uno. Tanto set como map tienen métodos que devuelven un iterador.
Los iteradores son objetos con next()método. Cuando se invoca el método next (), devuelve un objeto con'value' y 'done'propiedades. 'hecho' es booleano, esto volverá verdadero después de leer todos los elementos de la colección
Ejemplo 1: conjunto e iterador
var set = new Set(['a','b','c','d','e']);
var iterator = set.entries();
console.log(iterator.next())
La siguiente salida se muestra en la ejecución exitosa del código anterior.
{ value: [ 'a', 'a' ], done: false }
Dado que el conjunto no almacena clave / valor, la matriz de valor contiene clave y valor similares. done será falso ya que hay más elementos para leer.
Ejemplo 2: conjunto e iterador
var set = new Set(['a','b','c','d','e']);
var iterator = set.values();
console.log(iterator.next());
La siguiente salida se muestra en la ejecución exitosa del código anterior.
{ value: 'a', done: false }
Ejemplo 3: conjunto e iterador
var set = new Set(['a','b','c','d','e']);
var iterator = set.keys();
console.log(iterator.next());
La siguiente salida se muestra en la ejecución exitosa del código anterior.
{ value: 'a', done: false }
Ejemplo 4: mapa e iterador
var map = new Map([[1,'one'],[2,'two'],[3,'three']]);
var iterator = map.entries();
console.log(iterator.next());
La siguiente salida se muestra en la ejecución exitosa del código anterior.
{ value: [ 1, 'one' ], done: false }
Ejemplo 5: mapa e iterador
var map = new Map([[1,'one'],[2,'two'],[3,'three']]);
var iterator = map.values();
console.log(iterator.next());
La siguiente salida se muestra en la ejecución exitosa del código anterior.
{value: "one", done: false}
Ejemplo 6: mapa e iterador
var map = new Map([[1,'one'],[2,'two'],[3,'three']]);
var iterator = map.keys();
console.log(iterator.next());
La siguiente salida se muestra en la ejecución exitosa del código anterior.
{value: 1, done: false}