一、Set集合
1、ES6提供了新的数据结构Set(集合)
它类似于数组,但成员的值都是唯一的,集合实现了Iterator接口,所以可以使用【扩展运算符...】展开和【for...of】进行遍历。
Set本质上也是一个对象。
2、集合的属性和方法
(1)size:返回集合的元素个数
(2)add:增加一个新元素,返回当前集合
(3)delete:删除元素,返回boolean值
(4)has:检测集合中是否包含某个元素,返回boolean值
3、Set例子
//声明一个Set
let s = new Set();
console.log(s, typeof s);
//传入一个数组
let s2 = new Set(['大事儿','小事儿','好事儿','坏事儿','小事儿']);
console.log(s2);
Set会自动去除重复的项。
4、Set属性和方法例子
//传入一个数组
let s2 = new Set(['大事儿','小事儿','好事儿','坏事儿','小事儿']);
console.log(s2);
//元素个数
console.log(s2.size);
//添加新元素
s2.add('喜事儿');
console.log(s2);
//删除元素
s2.delete('坏事儿');
console.log(s2);
//检测
console.log(s2.has('好事儿')); //有返回true,没有返回false
//for...of遍历Set集合
for(let v of s2){
console.log(v);
}
//清空
s2.clear();
console.log(s2);
二、Set实践
1、数组去重
先将数组变为Set集合,在用扩展运算符变为数组。
2、交集
先去重,在比对。
3、并集
两个直接合并,转换成Set去重,在转换成数组。
4、差集
差集是交集的取反。
let arr = [1,2,3,4,5,4,3,2,1];
//1. 数组去重
let result = [...new Set(arr)]; //先将数组变为Set集合,在用扩展运算符变为数组
console.log(result);
//2. 交集
let arr2 = [4,5,6,5,6];
//arr去重
let result2 = [...new Set(arr)].filter(item => {
//把arr2也变成一个集合
let s2 = new Set(arr2);
if(s2.has(item)){
return true;
}else{
return false;
}
});
console.log(result2);
//3. 并集
let union = [...new Set([...arr, ...arr2])];
console.log(union);
//4. 差集
let diff = [...new Set(arr)].filter(item => !(new Set(arr2).has(item)));
console.log(diff);
三、Map集合
1、ES6提供了Map数据结构
它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当做键。Map也实现了Iterator接口,所以可以使用【扩展运算符】和【for...of】进行遍历。
2、Map的属性和方法
(1)size:返回Map的元素个数
(2)set:增加一个新元素,返回当前Map
(3)get:返回键名对象的键值
(4)has:检测Map中是否包含某个元素,返回boolean值
(5)clear:清空集合,返回undefined
(6)delete:删除一个元素
四、Map例子
1、声明Map
//声明Map
let m = new Map();
m.set('name','张三');
m.set('say', function(){
console.log("发言了!");
})
//声明一个对象
let key = {
school : 'xxx三中'
}
m.set(key, ['北京','上海','深圳']);
//打印Map对象
console.log(m);
Map的键可以是字符串,方法,对象等。
2、size
//size
console.log(m.size);
3、delete
//delete
m.delete('name');
console.log(m);
4、get
//get
console.log(m.get('say'));
5、遍历Map
v的每个元素,是一个数组。数组第一个元素是键,第二个元素是值。
//遍历
for(let v of m){
console.log(v);
}
五、小结
Map是升级版的对象,原来对象key只能是字符串。现在Map可以把对象作为一个key。