集合

作者: skoll | 来源:发表于2020-05-31 11:25 被阅读0次

    简介

    1 .集合的成员是无限的
    2 .集合中的成员都是唯一的
    3 .

    集合的操作

    1 .合并
    2 .交集
    3 .补集

    es6有专门的内置的结构,不用自己写了

    const s=new Set()
    // 定义set
    // 1.可以接受一个数组,或者其他具有iterable接口的其他数据结构作为参数
    // const divs=new Set(document.querySelectorAll('.div'))
    
    let old=[1,2,3,4,5,1,2]
    // 2.去重
    
    // 2.1去重数组
    // console.log([...new Set(old)])
    
    let str='aabbc'
    //2.2去重字符串
    // console.log([...new Set(str)].join(''))
    
    
    
    
    old.map((v)=>{
        s.add(v)
    })
    // 3.添加数据
    
    // 3.1向set添加数据的时候,不会发生类型转换,所以5,"5"是不同的值,set用来判断两个值是否不同。类似于===
    
    // 3.2添加对象总是成功的,因为他会认为两个对象总是不相等的
    
    // console.log(s)
    
    
    // 属性
    // 返回set里面数据的成员
    // console.log(s.size)
    
    
    // 方法
    
    // 操作方法
    
    //添加
    s.add("hello")
    
    // 删除
    s.delete("hello")
    
    // 判断是否是成员
    // console.log(s.has("hello"))
    
    // 清除
    // s.clear()
    
    // set转换为array
    // console.log([...s])
    // console.log(Array.from(s))
    
    
    
    // 遍历方法
    // 1 .set的遍历顺序就是插入顺序,所以这个可以做成有序的对象
    // for(let x of s){
    //     console.log(x)
    // }
    
    // s.forEach((x)=>{
    //     console.log(x)
    // })
    
    // s.map((x)=>{
    //     console.log(x)
    // })
    // 这个是不行的
    // 必须这样转一下,用一个第三方的操作
    let sArray=[...s]
    // sArray.map((x)=>{
    //     console.log(x)
    // })
    
    Set.prototype.union=function(arr1,arr2){
        return new Set([...arr1,...arr2])
    }
    
    // 交集
    function intersect(a,b){
        return new Set([...a].filter(x=>b.has(x)))
    }
    
    // 补集
    function difference(a,b){
        return new Set([...a].filter(x=>!b.has(x)))
    }
    
    console.log(s.union([1,2],[3,4]))
    
    let a=new Set([1,2,3])
    let b=new Set([2,3,4])
    console.log(difference(a,b))
    console.log(intersect(a,b))
    

    相关文章

      网友评论

          本文标题:集合

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