1. 定义
- Set对象是值的集合,你可以按照插入的顺序迭代它的元素。
- Set自带去重功能,Set中的元素只会出现一次,即 Set 中的元素是唯一的;
- 创建一个新的 Se对象:new Set()
- 可直接通过数组构造
let arr = [2, 3, 3, 4, 4, 5, 5, 1, 1];
let set = new Set(arr);
2. Set常用方法
2.1 增加数据 set.add()
- 可以添加任意类型的数据
// 3次添加同一个基本数据8,最后Set中只会有一个8
set.add(8);
set.add(8);
set.add(8);
// 添加任意类型的数据
let obj = {}; // 添加对象
set.add(null); // JS中基本数据类型 保存在栈中的一个值
set.add(obj); // 引用数据类型, 堆, 是一个地址
set.add(NaN); // JS中基本数据类型 保存在栈中的一个值
set.add(undefined); // JS中基本数据类型 保存在栈中的一个值
2.2 获取Set的长度 set.size
console.log('长度为size:', set.size); // 长度为size: 10
2.3 删除Set中的数据 set.delete()
此时注意set.delete({}) 是无法删除Set中现有的{},因为对象是引用数据类型,两个{}对应的地址并不相同,此时需要给{}一个统一的标识即let obj = {},删除obj即可
set.delete(obj); // 使用{}字面量是新对象,无法删除
set.delete(null);
set.delete(NaN);
set.delete(undefined);
2.4 转换成数组 Array.from(set)
let arr2 = Array.from(set); // 元素不会处理深拷贝
console.log('是否有8:',set.has(8)) // 是否有8: true
console.log(arr2); // [2, 3, 4, 5, 1, 8]
2.5 清除所有元素 set.clear()
set.clear();
console.log('set:',set); // set: Set(0)
2.6 Set的遍历
返回Iterator迭代器
- set.keys()
- set.values()
- set.entries()
let arr = [2, 3, 3, 4, 4, 5, 5, 1, 1];
let set = new Set(arr);
console.log(set); // [2, 3, 4, 5, 1]
let keys = set.keys()
console.log('keys:', keys); //
let vals = set.values();
console.log('values:', vals);
let entries = set.entries();
console.log('entries:', entries)
以上代码打印的结果:
- 可以使用forEach和for...of遍历取出Set的值
for (let key of keys) {
console.log('一个个的Key', key)
}
for (let val of vals) {
console.log('一个个的val', val)
}
for (let et of entries) {
console.log('一个个的实体', et) // 实体就是一个一个的数组,第一个值是key,第二个值是value
}
set.forEach((val, key) => {
console.log(val, key, 'xxx');
});