Es6提供了一种新的数据结构Set,类似于数组,但Set里面的值不重复,也就是说值唯一。
Set
对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
1.Set 本身是一个构造函数,用来生成Set数据结构:
const s1 = new Set();
console.log(s1); // Set(0)
2.Set可通过size计算内部元素的个数,Set可与Array相互转换:
// Array ['a', 'b'] 转 Set
const s2 = new Set(['a', 'b']);
console.log(s2); // Set(2)
console.log(s2.size); // 2
const s3 = new Set(['a', 'a', 'b', 'b']);
console.log(s3.size); // 2
console.log(s3); //Set(2)
// 用...操作符,将 Set 转 Array
const ary = [...s3];
console.log(ary); // Array(2)
其中s3刚开始给了它['a', 'a', 'b', 'b'],但打印出来的却只有2个,说明Set结构中不能有相同的成员值,如果有,new Set()中的值会去重。
3.Set中常用的方法:
1.向set结构中添加值 使用 add 方法.
2.从set结构中删除值 用到的方法是 delete ,返回值为布尔值.
3.判断某一个值是否是set数据结构中的成员 使用 has.
4.清空set数据结构中的值使用 clear 方法.
const s4 = new Set();
// 向set结构中添加值 使用add方法
s4.add('a').add('b');
console.log(s4.size) // 2
// 从set结构中删除值 用到的方法是delete 有返回值为布尔值
// s4 = Set{'a', 'b'}
const r1 = s4.delete('c');
console.log(s4.size) // 2
console.log(r1); // false 表示删除失败
// 判断某一个值是否是set数据结构中的成员 使用has
const r2 = s4.has('d');
console.log(r2) // false 表示没有d这个成员
// 清空set数据结构中的值 使用clear方法
s4.clear();
console.log(s4.size); // 0
4.迭代Set:
1.forEach
// 遍历set数据结构 从中取值
const s5 = new Set(['a', 'b', 'c']);
s5.forEach(value => {
console.log(value); // 在控制台中依次打印a, b, c
})
2.for (item of mySet/...)
keys():返回键名;
values(): 返回键值;
entries(): 返回键值对
键名=键值
let mySet = new Set([1, 2, 3]);
for(let item of mySet) {
console.log(item);
}
// 1
// 2
// 3
// 返回键名
for(let item of mySet.keys()) {
console.log(item);
}
// 1
// 2
// 3
// 返回键值
for(let item of mySet.values()) {
console.log(item);
}
// 1
// 2
// 3
// mySet 键名=键值
// 返回键值对
for(let item of mySet.entries()){
console.log(item);
}
// [1, 1]
// [2, 2]
// [3, 3]
5.Set 中的特殊值:
Set 对象存储的值总是唯一的,所以需要判断两个值是否恒等。有几个特殊值需要特殊对待:
1.+0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复;
2.undefined 与 undefined 是恒等的,所以不重复;
3.NaN 与 NaN 是不恒等的,但是在 Set 中只能存一个,不重复。