Mapa
Introdução
Map
A estrutura de dados é semelhante à JavaScript
do 对象
, mas a chave do objeto pode ser apenas uma string e a chave do Map pode ser 任意类型的值
. Deve-se notar que as chaves de um mapa estão vinculadas a endereços de memória, portanto algumas chaves aparentemente idênticas têm valores diferentes, o que será ilustrado a seguir com exemplos.
Map
O benefício da vinculação de chave e endereço de memória é evitar a colisão/conflito de atributos com o mesmo nome, portanto, quando expandimos as bibliotecas de outras pessoas, não precisamos nos preocupar em destruir o valor original.
O mapa pode aceitar uma matriz como parâmetro, mas os membros da matriz precisam ser matrizes que representam pares chave-valor.
const map = new Map([
['name', '张三'],
['age', '18']
]);
// {'name': '张三', 'age': '18'}
método de operação
map.has('name') // 判断是否存在某个键,返回true/false
map.get('name') // 获取某个键的值,如果不存在,则返回 undefined
map.set('sex', '男') // 添加成员,如果添加重复的键,会覆盖已存在的值
map.delete('sex') // 删除某个值,成功返回 true,失败返回 false
As teclas do Mapa estão vinculadas à memória, portanto preste atenção especial a isso. Dê uma olhada nos dois conjuntos de exemplos abaixo:
Dois valores que devem ser estritamente iguais para que o Map os considere a mesma chave, exceto 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
atravessar
Map
Ele também pode ser percorrido como uma matriz , mas o método de operação é diferente e só pode ser percorrido por keys()
, values()
, e outros métodos. A interface padrão do Traverser é .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 Fraco
Introdução
WeakMap
Semelhante a Map
, mas a chave só pode ser 对象
ou null
, não outros tipos.Ao mesmo tempo, os membros em WeakMap são referências fracas, que não afetam o mecanismo de coleta de lixo.
Definir
Introdução
Set
É ES6
uma nova estrutura de dados fornecida, semelhante à estrutura de array, sua chave e valor são os mesmos e seu valor é único e não repetido.
Set
Ele próprio é um construtor usado para gerar Set
estruturas de dados. Ao Set
adicionar valores, o tipo do valor adicionado não será alterado.
Set
Pode aceitar uma matriz como parâmetro para inicializar.
const set = new Set([1, 2, 3, 4, 4, 4]);
[...set] // [1, 2, 3, 4]
adicionar membros
Os membros podem add()
ser adicionados ao conjunto por meio do método, observe que os membros duplicados não podem ser adicionados.
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 membros
Set
Não há como modificar o próprio membro, mas ele pode ser modificado de outras formas, como mapear um novo Conjunto.
let set = new Set([1, 2, 3]);
set = new Set([...set].map(val => val * 2));
// {2, 4, 6}
método de operação
Set
alguns outros 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() // 清空所有成员
atravessar
Set
Ele também pode ser percorrido como uma matriz , mas o método de operação é diferente e só pode ser percorrido por keys()
, values()
, e outros 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
intersecção, união, diferença
Usando as características de travessia e Set
tipos de dados que não possuem valores duplicados, você pode facilmente obter interseção, união e diferença.
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 Fraco
Introdução
WeakSet
Semelhante Set
, também é uma coleção de valores exclusivos, mas o valor de WeakSet pode ser apenas um objeto (não-objeto relatará um erro) e os objetos em WeakSet são todos referências fracas.
O mecanismo de coleta de lixo não considera as referências aos objetos no WeakSet.Se não houver outras referências aos objetos no WeakSet, a coleta de lixo limpará os objetos no WeakSet.
const ws = new WeakSet([[1, 2], [3, 4]]);
// {[1, 2], [3, 4]}
método de operação
const ws = new WeakSet();
const obj = {
};
ws.add(obj) // 添加成员
ws.delete(obj) // 删除成员
ws.has(obj) // 判断成员是否存在,返回 true/false
Nota: WeakSets não podem ser percorridos.
FIM