ES6扩展内容(两种数据结构)

341 阅读2分钟

一,Set

1,构造器

const arr = new Set(); //得一个空的集合const arr = new Set(数组); //把数组转成一个集合
let si=new Set([1,2,3])    //{1,2,3}

2,遍历

      for of 循环,是针对迭代器进行的一种循环

3,add添加

lets1=new Set();
s1.add(1);
//{1}

4,delete删除

s1.delete(1)

5,数组去重

由于set本身的特点,它保存的数据不能有重复的(重复的数据是无效的)

let arr=[1,2,3,NaN,NaN,1,2,4];
let arr1=[...(new Set(arr))];

//[1,2,3,NaN,4]

New Set(arr)是去重,转成数组

二,Map

它类似于对象,也是键值对的集合。区别在于:

  • 对象的属性名(键名)只能是字符串。

  • 但map的键范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。键可以是任意类型的;

1,创建map

let m = new Map();

给初值:

let m = new Map([
    ["a","b"],
    [1,"c"]
])

//{"a"=>"b",1=>"c"}

2,添加set

let m = new Map([
    ["a","b"],
    [1,"c"]
])
m.set(false,"abc");let a=[1,2,3]m.set(a,{"name":"jake"})


3,获取get

let m = new Map([
    ["a","b"],
    [1,"c"]
])
m.set(false,"abc");
let a=[1,2,3]
m.set(a,{"name":"jake"})


m.get([1,2,3])获取不到值的。

原因是:get()时要比较栈区中的地址,而不是堆区中的数据。

4,重复的键盘会覆盖

三,利用set求 并集,交集,差集

let s01 = [1,2,3,1,2,6];
let s02 = [3,4,5,1,2];
// 集合 并集  交集  差集
function union(){
    let s1 =  new Set(s01);
    let s2 = new Set(s02);
    console.log([...new Set([...s1,...s2])])
}
union();
function intersection(){
    // 返回true表示留下
    return [...new Set(s01)].filter(function(item){
        return new Set(s02).has(item);
    })
}
console.log(intersection());
function diff(){
    // 返回true表示留下
    return [...new Set(s01)].filter(function(item){
        return !new Set(s02).has(item);
    });
}
console.log(diff());