Set
ES6 提供了新的数据结构 Set(集合)。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set本身是一个构造函数,用来生成 Set 数据结构。集合实现了 iterator 接口,所以可以使用扩展运算符和for…of…进行遍历,集合的属性和方法:
1)size 返回集合的元素个数
2)add 增加一个新元素,返回当前集合
3)delete 删除元素,返回boolean值
4)has 检测集合中是否包含某个元素,返回boolean值
5)clear() 清空
//声明一个set
let s = new Set();
let s1 = new Set(["111","222","333","444","555"]); //输出 "111","222","333","444","555"
let s2 = new Set(["111","111","333","444","555"]); //输出"111","333","444","555" 自动去重
console.log(s1);
console.log(s2);
//输出集合元素个数
console.log(s2.size); //4
//新增元素
s2.add("666");
console.log(s2) // 输出"111","333","444","555","666"
//删除元素
s2.delete("333");
console.log(s2); // 输出"111","444","555","666"
//检测元素
console.log(s2.has("444")); // 输出true
//由于集合使用了iterator接口,故可以用扩展运算符和for...of...进行遍历
for (let v of s2){
console.log(v); // 输出 111,444,555,666
}
//清空集合
s2.clear();
console.log(s2); // 集合已清空,无元素
Set实践
//定义一个数组
let arr = [1,2,3,4,5,4,3,2,1];
//1.数组去重
let result = [...new Set(arr)]; //new Set(arr)将数组转为类数组,此时里面的元素是不重复的,再使用...扩展运算符,将类数组转为数组
console.log(result); //输出去重后的数组 arr[1,2,3,4,5]
//2.求arr和arr2的交集
let arr2 = [4,5,6,5,6];
//先使用new Set(arr)将arr数组转化为没有重复元素的类数组,再使用扩展运算符...将类数组转化为数组,再使用.filter返回一个满足条件的新数组
/方法1
let result = [...new Set(arr)].filter(item => {
let s2 = new Set(arr2); // 4 5 6
if(s2.has(item)){
return true;
}else{
retuen false;
}
});
console.log(result); //4,5
//方法2
let result = [...new Set(arr)].filter(item => new Set(arr2).has(item));
console.log(result); //4,5
//3.求arr和arr2的并集
let union = [...newSet([...arr,...arr2])];
console.log(union);
//4.求arr和arr2的差集
let diff = [...new Set(arr)].filter(item => !new Set(arr2).has(item));//差集可以是并集的取反
console.log(diff);
Map
ES6提供了 Map数据结构。它类似于对象,也是键值对的集合。但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Map也实现了iterator接口,所以可以使用『扩展运算符』和『 for …of…』进行遍历。Map的属性和方法:
- size 返回Map的元素个数
2)set 增加一个新元素,返回当前Map
3)get 返回键名对象的键值
4)has 检测Map中是否包含某个元素,返回boolean值 - clear清空集合,返回undefined
//声明一个Map
let m = new Map();
//添加元素
m.set('name','xiaoming');
m.set('del','被删除了');
m.set('change',function(){
console.log("改变了");
});
let key = {
school:"第一中学"
};
m.set(key,['北京','上海','深圳']);
//获取map里元素个数 ---size
console.log(m.size);
//删除元素 --delete
m.delete('del');
//获取元素
console.log(m.get('change'));
//清空
m.clear();
//遍历
for (let v of m){
console.log(v);
}
console.log(m);
遍历