Set和Map

138 阅读2分钟

一、Set

Set对象允许你存储任何类型的值,无论是原始值或者是对象引用。它类似于数组,但是成员的值都是唯一的,没有重复的值。

Set 本身是一个构造函数,用来生成Set 数据结构。Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。

size:返回Set实例的成员总数

Set实例对象的方法

  • add(value):添加某个值,返回 Set 结构本身(可以链式调用)。
  • delete(value):删除某个值,删除成功返回true,否则返回false。
  • has(value):返回一个布尔值,表示该值是否为Set的成员。
  • clear():清除所有成员,没有返回值。 实现交集、并集、差集:
let arr = [1,2,3,4,5,5,4,3];
// 1.数组去重
let result = [...new Set(arr)];
console.log(result);   //[ 1, 2, 3, 4, 5 ]
// 2.交集
let arr2 = [3,4,5,5,6,11,12];
let res2 = result.filter(item => {
    let s2 = new Set(arr2);
    if(s2.has(item)){
        return true;
    }else{
        return false;
    }
})
console.log(res2);  //[ 3, 4, 5 ]
// 3.并集
let union = [...new Set([...arr,...arr2])];
console.log(union);  //[1, 2,  3,  4,5, 6, 11, 12]
// 4.差集(求集合1与集合2的差集就是集合1里面有但集合2里面没有的元素)
let diff = [...new Set(arr)].filter(item => !new Set(arr2).has(item));
console.log(diff);  //[ 1, 2 ]

二、Map

和set相似,但是map是以键值对的形式存储数据的

size:返回map结构的成员总数

方法:

  • set(key,value):设置键名key对应的键值value,然后返回整个map结构,如果key已经有值,则键值会被更新,否则就新生成该键
  • get(key):读取key对应的键值,如果找不到key,则返回undefined
  • has(key):返回一个布尔值,表示某个键是否在当前map对象中
  • delete(key):删除某个key,返回true,失败返回false
  • clear():清除所有成员,没有返回值
  • keys():返回键名的遍历器
  • values():返回键值的遍历器
  • entries():返回键值对的遍历器
  • forEach():遍历map的所有成员
// 声明Map
let m = new Map();
// 添加元素
m.set('name','zhangsan');
console.log(m);   //Map(1) { 'name' => 'zhangsan' }
m.set('Hi',function(){
    console.log('国庆快乐');
});
console.log(m.size);   //2
let key = {
    city:'shanghai'
};
m.set(key,['beijing','shenzhen','guangzhou']);
console.log(m);
/*结果如下
Map(3) {
    'name' => 'zhangsan',
    'Hi' => [Function (anonymous)],
    { city: 'shanghai' } => [ 'beijing', 'shenzhen', 'guangzhou' ] 
  }
  */
//  删除
m.delete('Hi');
console.log(m);
/*结果如下
Map(2) {
    'name' => 'zhangsan',
    { city: 'shanghai' } => [ 'beijing', 'shenzhen', 'guangzhou' ] 
  }
  */
// 获取
console.log(m.get('name'));  //zhangsan
// 清空
m.clear();
// 遍历
for(let v of m){
    console.log(v);
}
/*结果如下  键=>值
[ 'name', 'zhangsan' ]
[ { city: 'shanghai' }, [ 'beijing', 'shenzhen', 'guangzhou' ] ] 
*/