JavaScript数据结构:Set的实例教程

79 阅读2分钟

什么是集合

Set数据结构允许向一个容器添加数据。

ECMAScript6(也叫ES2015)将Set数据结构和Map一起引入了JavaScript世界。

Set是一个对象或原始类型(字符串、数字或布尔)的集合,你可以把它看作是一个Map,其中值被用作Map的键,而Map的值总是一个布尔的真。

初始化一个集合

一个Set是通过调用来初始化的。

添加项目到一个集合

你可以通过使用add 方法向集合添加项目。

s.add('one')
s.add('two')

一个集合只存储唯一的元素,所以多次调用s.add('one') ,不会增加新的项目。

你不能在同一时间向一个集合添加多个元素。你需要多次调用add()

检查一个项目是否在集合中

一旦一个元素在集合中,我们就可以检查这个集合是否包含它。

s.has('one') //true
s.has('three') //false

按键从一个集合中删除一个项目

使用delete() 方法。

确定一个集合中的项的数量

使用size 属性。

从一个集合中删除所有项目

使用clear() 方法。

遍历一个集合中的项目

使用keys()values() 方法 - 它们是等同的。

for (const k of s.keys()) {
  console.log(k)
}

for (const k of s.values()) {
  console.log(k)
}

entries() 方法返回一个迭代器,你可以像这样使用。

const i = s.entries()
console.log(i.next())

调用i.next() 将返回每个元素作为一个{ value, done = false } 对象,直到迭代器结束,这时donetrue

你也可以对这个集合使用forEach()方法。

s.forEach(v => console.log(v))

或者你可以直接在for...的循环中使用这个集合。

for (const k of s) {
  console.log(k)
}

用值初始化一个集合

你可以用一组值来初始化一个集合。

const s = new Set([1, 2, 3, 4])

转换为数组

将集合的键值转换为数组

const a = [...s.keys()]

// or

const a = [...s.values()]

一个弱化的集合

WeakSet是Set的一种特殊类型。

在一个Set中,项目永远不会被垃圾回收。而WeakSet可以让它的所有项自由地被垃圾回收。WeakSet的每个键都是一个对象。当这个对象的引用丢失时,其值可以被垃圾回收。

下面是主要的区别。

  1. 你不能对WeakSet进行迭代
  2. 你不能清除WeakSet中的所有项目
  3. 你不能检查它的大小

WeakSet通常由框架级代码使用,并且只暴露这些方法。

  • add()
  • 有()
  • 删除()