ES6 中引入的 Set
对象是一种集合数据结构,它存储不重复的值,类似于数组,但数组可以包含重复的元素,而 Set
不会。以下是 Set
对象的一些关键特性和常用方法:
特性
- 唯一性:
Set
中的每个值必须是唯一的,不允许重复。 - 无序性:虽然
Set
是通过添加顺序来存储元素,但这个顺序并不在集合中体现,不能通过索引来访问元素。 - 类型多样性:可以存储任何类型的值,包括对象。
创建 Set
- 使用
new Set()
构造函数创建一个空的Set
。 - 也可以在创建时传入一个可迭代对象(如数组),自动去除其中的重复元素。
let mySet = new Set();
let mySetFromArray = new Set(['a', 'b', 123, 123, true, 123123123]);
常用方法
-
size:返回
Set
实例的成员总数。console.log(mySetFromArray.size); // 输出: 5
-
add(value):添加一个元素到
Set
对象,返回Set
结构本身。mySet.add('海绵宝宝');
-
delete(value):从
Set
对象中移除一个元素。mySet.delete('b');
-
has(value):检查
Set
对象是否包含某个值,返回布尔值。console.log(mySet.has(123)); // 输出: true 或 false
-
clear():移除
Set
对象中的所有元素。mySet.clear();
-
forEach(callbackFn, thisArg):对
Set
对象中的每个值执行给定函数。mySet.forEach((value) => console.log(value));
转换为数组
- 使用扩展运算符
...
可以将Set
转换为数组。 - 使用
Array.from()
方法也可以将Set
转换为数组。
let arrayFromSet = [...mySetFromArray];
let arrayFromSet2 = Array.from(mySetFromArray);
数组去重
- 使用
Set
可以轻松实现数组去重。
let arr = [1, 11, 12, 23, 22, 11, 12, 1, 4, 64, 3];
let uniqueNumbers = new Set(arr);
let resArr = [...uniqueNumbers];
注意事项
Set
中的元素是按插入顺序存储的,但只能通过迭代访问。- 虽然
Set
可以存储对象,但对象作为Set
的元素时,是通过引用比较的,因此相同的对象会被视为不同的元素。
示例
// 创建一个 Set 实例
let mySet = new Set(['a', 'b', 123, true]);// 打印 Set 实例
console.log(mySet); // 输出: Set { 'a', 'b', 123, true }// 获取 Set 的大小
console.log(mySet.size); // 输出: 4// 添加元素
mySet.add('海绵宝宝');
console.log(mySet); // 输出: Set { 'a', 'b', 123, true, '海绵宝宝' }// 删除元素
mySet.delete('b');
console.log(mySet); // 输出: Set { 'a', 123, true, '海绵宝宝' }// 检查元素是否存在
console.log(mySet.has(123)); // 输出: true// 清空 Set
mySet.clear();
console.log(mySet); // 输出: Set {}
通过这些特性和方法,Set
对象提供了一种强大且灵活的方式来处理不重复的集合数据。