美文网首页
ES6新增Set集合

ES6新增Set集合

作者: 易路先登 | 来源:发表于2019-06-19 17:43 被阅读0次
    1 Set集合的获取

    类似于数组但不是数组,它的元素是不可重复的。

    • 构造函数加set.add(arg)方法
    let setList = new Set();
    setList.add(1);
    setList.add(2);
    setList.add(1);
    console.log(setList );//{1,2}
    
    • 构造函数初始化
    let arr = [1,2,1];
    let setList = new Set(arr);
    console.log(setList );//{1,2}
    

    可以利用set集合元素不重复,构造函数初始化时可传入数组的特点对数组进行去重操作

    let arr = [1,2,1];
    let setList = new Set(arr);
    arr = Array.from(setList);
    console.log(arr);//[1,2]
    
    2 Set的‘长度’set.size
    let arr = [1,2,1];
    let setList = new Set(arr);
    console.log(setList .size);//2
    
    3 Set是一种数据容器,存在增删改查操作(curd)下面做个简单介绍:
    • 增 set.add(arg)
    let setList = new Set();
    setList.add(1);
    console.log(setList );//{1}
    
    1. set.delete(arg)删除某个元素
    2. set.clear()删除全部元素
    let setList = new Set();
    setList.add(1);
    setList.add(2);
    setList.add('3');
    console.log(setList );//{1,2,'3'}
    setList.delete(1);
    console.log(setList );//{2,'3'}
    setList.clear();
    console.log(setList );//{}
    
    • 改 遍历,找到对应项进行修改,如要修改setList 集合中的name是'张三的项的年龄为30
    let setList = new Set();
    setList.add({name:'zhangsan',age:18});
    setList.add({name:'lisi',age:18});
    setList.add({name:'王五',age:18});
    let arr = setList.forEach((value,key,set)=>{
        if(value.name==='zhangsan'){
            value.age = 30;
        }
    })
    console.log(setList);
    /*{
    {name: "zhangsan", age: 30},
    {name: "lisi", age: 18},
    {name: "王五", age: 18}
    }
    */
    

    注意:这还是set集合中放置的是引用类型元素时的改方法,如果想改变基本类型值得元素,只能通过delete再add,但位置就无法对应,所以几乎是不可能的。

    • 查 set.has(arg)
    let setList = new Set();
    setList.add(1);
    setList.add(2);
    setList.add('3');
    console.log(setList.has('3') );//true
    
    
    4 set的遍历
    • let...of
    let setList = new Set();
    setList.add(1);
    setList.add(2);
    setList.add('3');
    for(let key of setList.keys()){
        console.log(key);
    }//1 2 '3'
    for(let value of setList.values()){
        console.log(value);
    }//1 2 '3'
    for(let [key,value] of setList.entries()){
        console.log(key,value);
    }//1 1  2 2   '3'  '3'
    
    • forEach
    let setList = new Set();
    setList.add(1);
    setList.add(2);
    setList.add('3');
    setList.forEach(function(item){
      console.log(item);
    })//1 2 '3'
    
    5 WeakSet
    let weakList = new WeakSet();
    let obj = {};
    weakList .add(obj );
    console.log(weakList );
    

    从上边代码看似乎WeakSet与Set没啥区别,请注意weak是虚弱阉割的意思,WeakSet相对于Set多了很多限制,如下:

    1. 只能存放引用类型的元素(而且还是弱引用,会被js垃圾回收机制忽视)
    2. 没有clear方法
    3. 不能遍历
    4. 没有size属性
      ES6总篇--目录

    相关文章

      网友评论

          本文标题:ES6新增Set集合

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