2-Set和Map结构

120 阅读2分钟

【Set和Map数据结构】

1.Set

它类似于数组,但是成员的值都是唯一的,没有重复的值

const set = new Set([1, 2, 2, 3, 4, 4]);
[...set] // [1, 2, 3, 4]
set.size // 4

const set1 = new Set()
set1.add('a')
set1.add('b')
set1.add('b')
[...set1] // ['a', 'b']
  • size属性:返回Set实例的成员总数。

Set4个操作方法:

  1. Set.prototype.add(value):添加某个值,返回 Set 结构本身。
  2. Set.prototype.delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
  3. Set.prototype.has(value):返回一个布尔值,表示该值是否为Set的成员。
  4. Set.prototype.clear():清除所有成员,没有返回值。

Set4个遍历方法:

  1. Set.prototype.keys():返回键名的遍历器
  2. Set.prototype.values():返回键值的遍历器
  3. Set.prototype.entries():返回键值对的遍历器
  4. Set.prototype.forEach():使用回调函数遍历每个成员

作用:

  1. 去除数组中重复成员
const arr1 = [1, 2, 2, 3, 4, 5, 5, 6]
[...new Set(arr1)] // [1, 2, 3, 4, 5, 6]
  1. 去除字符串里面的重复字符
[...new Set('ababbc')].join('') // "abc"

WeakSet

Set和WeakSet的区别:

  1. WeakSet 只能储存对象引用,不能存放值,而 Set 对象都可以
  2. WeakSet 对象中储存的对象值都是被弱引用的,即垃圾回收机制不考虑 WeakSet 对该对象的引用,如果没有其他的变量或属性引用这个对象值,则这个对象将会被垃圾回收掉

WeakSet方法:

  1. add(value):在WeakSet 对象中添加一个元素value。
  2. has(value):判断 WeakSet 对象中是否包含value。
  3. delete(value):删除元素 value。

2.Map

它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键

const m = new Map();
const o = {p: 'Hello World'};

m.set(o, 'content')
m.get(o) // "content"

m.has(o) // true
m.delete(o) // true
m.has(o) // false
  1. size属性
    size属性返回 Map 结构的成员总数
const map = new Map();
map.set('foo', true);
map.set('bar', false);
map.size // 2
  1. Map.prototype.set(key, value)
    set方法设置键名key对应的键值为value,然后返回整个 Map 结构。
    如果key已经有值,则键值会被更新,否则就新生成该键。
const m = new Map();
m.set('edition', 6)        // 键是字符串
m.set(262, 'standard')     // 键是数值
m.set(undefined, 'nah')    // 键是 undefined

set可采用链式写法

let map = new Map()
  .set(1, 'a')
  .set(2, 'b')
  .set(3, 'c');
  1. Map.prototype.get(key)
    get方法读取key对应的键值,如果找不到key,返回undefined。

  2. Map.prototype.has(key)
    has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中

  3. Map.prototype.delete(key)
    delete方法删除某个键,返回true。如果删除失败,返回false。

  4. Map.prototype.clear()
    clear方法清除所有成员,没有返回值

WeakMap

WeakMap 对象是一组键值对的集合,其中的键是弱引用对象,而值可以是任意。 注意,WeakMap 弱引用的只是键名,而不是键值。键值依然是正常引用。