一、Set集合

ES6 提供了新的数据结构 Set(集合)。它类似于数组,但成员的值都是唯一的(集合会自动去重),集合实现了-迭代器iterator接口,所以可以使用『扩展运算符』和『for…of…』进行遍历。

Set([接收可迭代数据,一般是数组])

1.1 Set集合的属性和方法:

  1. size 返回集合的元素个数;
  2. add 增加一个新元素,返回当前集合;
  3. delete 删除元素,返回 boolean 值;
  4. has 检测集合中是否包含某个元素,返回 boolean 值;
  5. clear 清空集合,返回 undefined;

1.2 Set基本使用

//声明一个 set
let s = new Set();
let s2 = new Set(['大事儿','小事儿','好事儿','坏事儿','小事儿']); //接收可迭代数据,一般是数组
//元素个数
console.log(s2.size);

//添加新的元素
s2.add('喜事儿');

//删除元素
s2.delete('坏事儿');

//检测是否存在
console.log(s2.has('糟心事'));

//清空集合
s2.clear();

console.log(s2);
//遍历
for(let v of s2){
    console.log(v);
}

1.3 Set集合实践

let arr = [1,2,3,4,5,4,3,2,1]; //构建一个有重复数据的数组
//1. 数组去重
let result = [...new Set(arr)]; //使用扩展运算符打开集合(集合已经自动去重),返回的仍是数组
console.log(result);

//2. 求交集 4 5
let arr1 = [1,2,3,4,5,4,3,2,1];
let arr2 = [4,5,6,5,6];
let result = [...new Set(arr1)].filter(item => { //先进行了数组arr1去重
    let s2 = new Set(arr2);// 去重后返回集合4 5 6
    if(s2.has(item)){ //对集合使用has方法
        return true;
    }else{
        return false;
    }
});
//等于简化后的代码
//let result = [...new Set(arr1)].filter(item => new Set(arr2).has(item));
console.log(result);

//3. 求并集
let union = [...new Set([...arr1, ...arr2])];
console.log(union);

//4. 求差集 (即求交集的逆运算)1 2 3
let diff = [...new Set(arr)].filter(item => !(new Set(arr2).has(item)));
console.log(diff);

二、Map集合

ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合。但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Map 也实现了iterator 接口,所以可以使用『扩展运算符』和『for…of…』进行遍历。

2.1 Map的属性和方法

  1. size 返回 Map 的元素个数;
  2. set 增加一个新元素,返回当前 Map;
  3. get 返回键名对象的键值;
  4. has 检测 Map 中是否包含某个元素,返回 boolean 值;
  5. clear 清空集合,返回 undefined;

2.2 Map基本使用

//声明 Map
let m = new Map();

//添加元素 (键,值)
m.set('name','尚硅谷');
m.set('change', function(){
    console.log("我们可以改变你!!");
});
let key = {
    school : 'ATGUIGU'
};
m.set(key, ['北京','上海','深圳']);

//size
console.log(m.size);

//删除-传入key做参数
m.delete('name');

//获取-传入key做参数
console.log(m.get('change'));
// console.log(m.get(key));

//清空
// m.clear();

//遍历
for(let v of m){
    console.log(v);
}