美文网首页
ES6的Set、Map数据结构 数组

ES6的Set、Map数据结构 数组

作者: sponing | 来源:发表于2016-12-20 22:28 被阅读0次

    Set 数组


    filter过滤数组的数值
    var ss = [1,2,3,4,5,6,7,8]
    ss.filter(function(ele){
        if(ele>5){
            return true
        }
        return false
    });
    console.log(ss) //[6,7,8]
    
    并集

    合并两个数组,去掉重复的

    let a = new Set([1,2,3,4])
    let b = new Set({4,5,6})
    let union = new Set([...a,...b])
    console.log([...union]) //1 2 3 4 5 6 去掉重复的4
    
    交集

    利用filter()和has()来进行数据交集

    let a = new Set([1,2,3,4])
    let b = new Set({4,5,6})
    let intersect = [...a].filter(function(ele){
       return b.has(elem)
    })
    // es6 简写方式
    //  let intersect = [...a].filter(
    //        x => x.has(x)
    //  })
    

    差集

    let a = new Set([1,2,3,4])
    let b = new Set({4,5,6})
    let difference= [...a].filter(function(ele){
       return !b.has(elem)
    })
    //1,2,3
    

    WeakSet 针对对象

    1.构造函数
    WeakSet与Set结构类似,也是不重复的值的集合。但是它与Set有两个区别。
    首先,WeakSet的成员只能是对象,而不能是其它类型的值。
    其次,WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用。也就是说,如果其它对象不在引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于WeakSet中。这个特点意味着无法引用WeakSet的成员,因此WeakSet是不可遍历的。

    报错
    var ws = new WeakSet();
    ws.add(1); 
    // Uncaught TypeError: Invalid value used in weak set
    

    2.属性和方法

    • add(value)
    • delete()
    • has()
    var weakset = new WeakSet()
    let aObj = {a:'aa'}
    weakset .add(aObj)
    
    1. 适用
      可以用在储存DOM节点,当DOM节点添加和删除后不会导致内存泄漏。

    weakset 不能取值,不能显示 只用来表示是否有重复的对象

    Map 对象


    var mapData = new Map();
    var obj1 = {};
    var obj2 = {};
    mapData.set(obj1,'111') //添加元素
    mapData.set(obj2,'333')//添加元素
    console.log( mapData.get(obj1) ) // 获取
    console.log( mapData.has(obj1) ) //判断
    console.log( mapData.delete(obj1) ) 删除
    mapData.clear() //清空
    

    1.目的Map结构与对象类似,与传统的对象对比而言,传统仅能使用字符串当做键, Map结构则可以使用变量当做键。这种对应关系可以称之为“值--值”对应,是对象的完善版。
    2.构造函数构造
    函数接受一个二维数组当做参数。

    var m = new Map([['name','zhangsan'],['sex','male']]);
    console.log(m);// Map {"name" => "zhangsan", "sex" => "male"}
    
    

    如果对同一个键多次赋值,后面的值将覆盖前一次的值。
    只有对同一对象的引用,Map结构才将其视为同一个键。

    3.属性和方法

    • size
    • set(key,value)
    • get(key)
    • has(key)
    • delete(key)
    • clear()
      4.遍历方法
    • keys()
    • values()
    • entries()
    • forEach()

    5.Map转换为数组结构

    var m = new Map([['0','zhangsan'],['1','lisi']]);
    console.log([...m.keys()]);// ["0", "1"]
    

    WeakMap

    与Map类似,唯一区别在于它只接受对象作为键名,而且不计入垃圾回收机制。
    四个方法:

    相关文章

      网友评论

          本文标题:ES6的Set、Map数据结构 数组

          本文链接:https://www.haomeiwen.com/subject/mucxvttx.html