JavaScript中的Set


本文作者: jsweibo

本文链接: https://jsweibo.github.io/2020/06/22/JavaScript%E4%B8%AD%E7%9A%84Set/

摘要

本文主要讲述了:

  1. 什么是 Set
  2. 实例属性
  3. 原型方法
  4. 类型转换

正文

什么是 Set

对集合的实现,是 ES2015 新增的一种引用类型。

由于集合中的元素具有唯一性,因此Set中的各个值都是独一无二的

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
const foo = new Set();
foo.add('a');
foo.add('b');
foo.add('c');

// 输出3
console.log(foo.size);

// 无效
foo.add('c');

// 输出3
console.log(foo.size);

在添加元素时,集合需要进行相等判断,这里使用的是SameValueZero算法。

即在Object.is()的基础上,把0-0视作相等。

示例:

1
2
3
4
5
6
7
8
9
10
// 只存在一个NaN
console.log(new Set().add(NaN).add(NaN));

// 只存在一个0
console.log(
new Set()
.add(0)
.add(-0)
.add(+0)
);

由于Set实现了Set.prototype[Symbol.iterator],因此可以被for...of迭代。此外,迭代的顺序和插入的顺序是相同的。

示例:

1
2
3
4
5
6
7
const foo = new Set();
foo.add(1);
foo.add(2);
foo.add(3);
for (let item of foo) {
console.log(item);
}

实例属性

size

大小

原型方法

add()

在集合中添加元素,返回集合本身

has()

判断集合中是否存在此元素

delete()

从集合中删除元素

  • 如果删除成功,返回true
  • 如果删除失败,返回false

clear()

清空集合

forEach()

遍历集合中的值

示例:

1
2
3
4
5
6
7
8
9
const foo = new Set();
foo.add(1);
foo.add(2);
foo.add(3);
foo.forEach(function (value, key, self) {
console.log(value);
console.log(key);
console.log(self);
});

keys()

返回包含键名的迭代器对象

注意:Set中的键名和键值相等

values()

返回包含键值的迭代器对象

注意:Set中的键名和键值相等

entries()

返回包含有键名和键值组成的数组的迭代器对象

注意:Set中的键名和键值相等

示例:

1
2
3
4
5
6
7
8
9
const foo = new Set();
foo.add({});
foo.add({});
foo.add({});
const entryList = foo.entries();
const firstEntryArray = entryList.next();

// true
firstEntryArray[0] === firstEntryArray[1];

类型转换

其他类型转换成 Set

Array

1
new Set([1, 2, 3, 1, 2, 3]);

Set 转换成其他类型

Array

1
Array.from(new Set().add(1).add(2).add(3));

1
[...new Set().add(1).add(2).add(3)];

参考资料

本文作者: jsweibo

本文链接: https://jsweibo.github.io/2020/06/22/JavaScript%E4%B8%AD%E7%9A%84Set/


本文对你有帮助?请支持我


支付宝
微信