前言
集合是无序的,并且集合中的元素是唯一的。JavaScript ES6 提供了新的数据结构 Set, 可以创建集合对象。
Set 集合
创建一个set实例,使用new Set()
const s1 = new Set(); // 空集合
console.log(s1) // Set(0)
可以传一个数组来初始化集合对象
const s1 = new Set([1, 2, 3]); // 传 arry 数组
console.log(s1) // Set(3) {1, 2, 3}
如果数组中有重复的成员,set集合会去重
const s1 = new Set([1, 2, 3, 3]); // 传 arry 数组
console.log(s1) // Set(3) {1, 2, 3}
size 属性获取集合个数
const s1 = new Set([1, 2, 3, 3]); // 传 arry 数组
console.log(s1) // Set(3) {1, 2, 3}
console.log(s1.size) // 3
集合操作
集合对象常用的几个操作
- .add() 在Set对象尾部添加一个元素。返回该Set对象。
- .delete(value) 移除Set中与这个值相等的成员
- .clear() 清空set对象内的所有成员。
- .has(value) 判断set 中是否存在该值,返回布尔值
.add() 添加一个成员。
在Set对象尾部添加一个成员。返回该Set对象。
const s1 = new Set([1, 2, 3]); // 传 arry 数组
console.log(s1) // Set(3) {1, 2, 3}
s1.add(4)
console.log(s1) // Set(4) {1, 2, 3, 4}
.delete(value) 删除一个成员
移除Set中与值为value元素
const s1 = new Set([1, 2, 3]); // 传 arry 数组
console.log(s1) // Set(3) {1, 2, 3}
s1.delete(2)
console.log(s1) // Set(2) {1, 3}
.clear() 清除所有的成员
clear() 清除所有的成员,没有返回值
const s1 = new Set([1, 2, 3]); // 传 arry 数组
console.log(s1) // Set(3) {1, 2, 3}
s1.clear()
console.log(s1) // Set(0) {size: 0}
.has(value) 判断是否存在
.has(value) 判断是否存在,返回布尔值
const s1 = new Set([1, 2, 3]); // 传 arry 数组
console.log(s1) // Set(3) {1, 2, 3}
console.log(s1.has(3)) // true
forEach方法遍历集合
使用forEach方法遍历集合,item是集合中的成员
const s1 = new Set(['a', 'b', 'c']);
s1.forEach(function(item){
console.log(item); // item是集合中的成员
})
forEach方法里面可以传3个参数
- item 成员
- index 集合中没有索引,所以index也是成员本身
- set 遍历的set集合本身
const s1 = new Set(['a', 'b', 'c']); // 传 arry 数组
s1.forEach(function(item,index,set){
console.log(item, index, set);
//index和set一般不需要
})
并集(Union)、交集(Intersect)和差集(Difference)
Set 可以实现并集(Union)、交集(Intersect)和差集(Difference)
let a = new Set(['a', 'b', 'c']);
let b = new Set(['b', 'c', 'd']);
// 并集
let x = new Set([...a, ...b]);
console.log(x) // Set(4) {'a', 'b', 'c', 'd'}
// 交集
let y = new Set([...a].filter(x => b.has(x)));
console.log(y) // Set(2) {'b', 'c'}
// 差集
let z = new Set([...a].filter(x => !b.has(x)));
console.log(z) // Set(1) {'a'}
Array.from转为数组
把集合转成数组
let a = new Set([1, 2, 4]);
c = Array.from(a);
console.log(c); //(3) [1, 2, 4]
总结:与Arry数组不一样地方
1.Set集合不可以用下标取值
2.Set集合没有重复元素
3.Set集合没有length属性而是size
4.Set集合可以通过Array.from转为数组