ES6新增数据结构之--Set

111 阅读2分钟

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)

以上代码打印的结果: image.png

  • 可以使用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');
});

image.png