Análisis de tipos de mapas y conjuntos

Mapa

Introducción

MapLa estructura de datos es similar a JavaScriptla 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.

MapEl 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

MapTambié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

WeakMapSimilar 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

SetSe ES6proporciona 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.

SetEn sí mismo es un constructor utilizado para generar Setestructuras de datos. Al Setagregar valores, el tipo del valor agregado no cambiará.

SetPuede 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

SetNo 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

Setalgunos 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

SetTambié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 Setlos 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

WeakSetDe 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

Supongo que te gusta

Origin blog.csdn.net/m0_53808238/article/details/131230468
Recomendado
Clasificación