ES6精讲06-set和map

211 阅读2分钟

1.set集合:表示无重复值的有序列表

  • Set是一种数据结构,类似于数组,成员都是唯一的,没有重复的值。
  • Set本身是一个构造函数,用来生成Set数据结构。
  • 利用add方法想set添加值的时候,重复的值是不会被再次添加进去的,利用此方法以及数组的map方法可以对数组进行去重。

🌵看看set集合是个啥

let set = new Set();
console.log(set);    
console.log(typeof(set)); // object

set

🌵无法添加重复的值

let set = new Set();
set.add(2);
set.add('4');
set.add('4');
console.log(set)  // Set(2) {2, "4"}	
// 校验某个值是否在set中
console.log(set.has('4')); true
console.log(set.size); // 2
  • has():校验某个值是否在set中,返回布尔值
  • size():set集合的长度,返回成员总数
  • add():添加某个值,返回Set结构本身。
  • delete:删除某个值,返回布尔值,是否删除成功。

2.数组和Set的结合使用:

并集:

let a =new Set([1,2,3,4]) ;
let b =new Set([2,3,4]);
let unit = new Set([...a,...b]);
console.log(Array.from(unit));
//[1,2,3,4] 

交集:

let a =new Set([1,2,3,4]) ;
let b =new Set([2,3,4]);
let intersection = new Set([...a].filter(x=>b.has(x)));
console.log(Array.from(intersection));//[2,3,4];

差集:

let a =new Set([1,2,3,4]) ;
let b =new Set([2,3,4]);
//set数据结构是可以使用forEach方法遍历的
let difference = new Set([...a].filter(x => !b.has(x)));
console.log(Array.from(difference)) //[1]
  • keys、values、entries、forEach是set可以使用的4中遍历方法

🌵将set数据转换成数组

// 将set转换成数组
let set2 = new Set([1, 2, 3, 3, 3, 4]);

// 1.扩展运算符
let arr = [...set2]
console.log(arr);//[1,2,3,4]

// 2.Array.from(set2)
let arr1 = Array.from(set2);
console.log(arr1)// [1,2,3,4]

🌵set中对对象的引用无法被释放:

// 1.set中对象的引用无法被释放
let set3 = new Set(),obj = {};
set3.add(obj);
// 释放当前的资源
obj = null;   //虽然写了,但是并没有什么卵用
console.log(set3);

set内部对象无法引用

3.Map:类型是键值对的有序列表,键和值是任意类型

  • js中对象本质上是键值对的的集合,但是只能接受字符串作为键名,为了打破这种:字符串---值的形式,有了Map结构。
  • Object:字符串---值
  • Map:值---值
  • Map的键是跟内存地址绑定的,只要内存地址不一样,就视为两个键

🌵Map:

  • Map作为构造函数的时候,可以接受一个数组作为参数,该数组的成员是一个个表示键值对的数组。

    var map = new Map([["name","王小二"],["friends","李二牛"]]);
    
    map.get("name")//"王小二"
    
// Map类型是键值对的有序列表,键和值是任意类型
let map = new Map();
map.set('name','张三');
map.set('age',20);

console.log(map.get('name')); //张三

console.log(map); //Map(2) {"name" => "张三", "age" => 20}

map.has('name');//true

map.delete('name');
map.clear(); //全部都清理掉
console.log(map);  //Map(0)

map.set(['a',[1,2,3]],'hello');  //让整个数组作为key,对应的value是hello
console.log(map);   //Map(1) {Array(2) => "hello"}