Mapa
Introducción
Map
La estructura de datos es similar a JavaScript
la de 对象
, pero la clave del objeto solo puede ser una cadena y la clave del mapa puede ser 任意类型的值
. Cabe señalar que las claves de un mapa están vinculadas a direcciones de memoria, por lo que algunas claves aparentemente idénticas tienen valores diferentes.Esto se ilustrará a continuación con ejemplos.
Map
El beneficio del enlace de dirección de memoria y clave es evitar la colisión/conflicto de atributos con el mismo nombre, por lo que cuando expandimos las bibliotecas de otras personas, no tenemos que preocuparnos por destruir el valor original.
El mapa puede aceptar una matriz como parámetro, pero los miembros de la matriz deben ser matrices que representen pares clave-valor.
const map = new Map([
['name', '张三'],
['age', '18']
]);
// {'name': '张三', 'age': '18'}
Método de operación
map.has('name') // 判断是否存在某个键,返回true/false
map.get('name') // 获取某个键的值,如果不存在,则返回 undefined
map.set('sex', '男') // 添加成员,如果添加重复的键,会覆盖已存在的值
map.delete('sex') // 删除某个值,成功返回 true,失败返回 false
Las claves del Mapa están ligadas a la memoria, así que presta especial atención a esto. Eche un vistazo más de cerca a los dos conjuntos de ejemplos a continuación:
Dos valores que deben ser estrictamente iguales para que el Mapa los considere la misma clave, excepto NaN.
const map = new Map();
map.set(['a'], 666);
map.get(['a']) // undefined
const map = new Map();
const a = ['a']
map.set(a, 666);
map.get(a) // 666
atravesar
Map
También se puede recorrer como una matriz , pero el método de operación es diferente y solo se puede recorrer con keys()
, values()
, y otros métodos. La interfaz de traverser predeterminada es .entries()
forEach()
entries
const map = new Map([
['name', '张三'],
['age', '18']
]);
for (let item of map.keys()) {
console.log(item);
}
// 'name'
// 'age'
for (let item of map.values()) {
console.log(item);
}
// '张三'
// '18'
for (let item of map.entries()) {
console.log(item);
}
// ['name', '张三']
// ['age', '18']
for (let [key, value] of map.entries()) {
console.log(key, value);
}
// 'name' '张三'
// 'age' '18'
for (let [key, value] of map) {
console.log(key, value);
}
// 'name' '张三'
// 'age' '18'
map.forEach(function(value, key, map) {
});
Mapa débil
Introducción
WeakMap
Similar a Map
, pero la clave solo puede ser 对象
o null
, no otros tipos Al mismo tiempo, los miembros en WeakMap son referencias débiles, que no afectan el mecanismo de recolección de basura.
Colocar
Introducción
Set
Se ES6
proporciona una nueva estructura de datos, similar a la estructura de matriz, su clave y valor son los mismos, y su valor es único y no se repite.
Set
En sí mismo es un constructor utilizado para generar Set
estructuras de datos. Al Set
agregar valores, el tipo del valor agregado no cambiará.
Set
Puede aceptar una matriz como parámetro para inicializar.
const set = new Set([1, 2, 3, 4, 4, 4]);
[...set] // [1, 2, 3, 4]
Añadir miembros
Los miembros se pueden add()
agregar al Conjunto a través del método, tenga en cuenta que no se pueden agregar miembros duplicados.
const set = new Set([1, 2, 3, 4, 4, 4]);
set.add(1) // {1, 2, 3, 4}
set.add(5) // {1, 2, 3, 4, 5}
modificar miembros
Set
No hay forma de modificar el miembro en sí, pero se puede modificar de otras formas, como mapear un nuevo conjunto.
let set = new Set([1, 2, 3]);
set = new Set([...set].map(val => val * 2));
// {2, 4, 6}
Método de operación
Set
algunos otros métodos.
const set = new Set([1, 2, 3, 4, 4, 4]);
set.add(5) // 添加成员
set.delete(1) // 删除成员
set.has(5) // 判断成员是否存在,返回 true/false
set.clear() // 清空所有成员
atravesar
Set
También se puede recorrer como una matriz , pero el método de operación es diferente y solo se puede recorrer con keys()
, values()
, y otros métodos.entries()
forEach()
const set = new Set([1, 2, 3]);
for (let item of set.keys()) {
console.log(item);
}
// 1
// 2
// 3
for (let item of set.values()) {
console.log(item);
}
// 1
// 2
// 3
for (let item of set.entries()) {
console.log(item);
}
// [1, 1]
// [2, 2]
// [3, 3]
set.forEach((value, key) => console.log(key + ' : ' + value))
// 1 : 1
// 2 : 2
// 3 : 3
intersección, unión, diferencia
Usando las características del recorrido y Set
los tipos de datos que no tienen valores duplicados, puede obtener fácilmente la intersección, la unión y la diferencia.
const a = new Set([1, 2, 3]);
const b = new Set([3, 4, 5]);
// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {3}
// 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4, 5}
// 差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1, 2, 4, 5}
conjunto débil
Introducción
WeakSet
De manera similar Set
, también es una colección de valores únicos, pero el valor de WeakSet solo puede ser un objeto (los no objetos informarán un error), y los objetos en WeakSet son todos referencias débiles.
El mecanismo de recolección de basura no considera las referencias a los objetos en el WeakSet. Si no hay otras referencias a los objetos en el WeakSet, entonces la recolección de basura limpiará los objetos en el WeakSet.
const ws = new WeakSet([[1, 2], [3, 4]]);
// {[1, 2], [3, 4]}
Método de operación
const ws = new WeakSet();
const obj = {
};
ws.add(obj) // 添加成员
ws.delete(obj) // 删除成员
ws.has(obj) // 判断成员是否存在,返回 true/false
Nota: los WeakSets no se pueden atravesar.
FIN