集合的封装(交集,并集,子集,差集)

本文介绍了一种使用JavaScript实现的自定义Set数据结构,并详细解释了其核心方法,包括has、add、remove、clear、size及values等。此外,还探讨了如何利用这些基本操作实现集合的并集、交集、差集以及子集判断等功能。
摘要由CSDN通过智能技术生成
function Set(){
    this.items = {}
    //has方法
    Set.prototype.has = function(value){
        return this.items.hasOwnProperty(value)
    }
    //add方法
    Set.prototype.add = function(value){
        //value 如果存在   如果不存在
        if(this.has(value)){
            return false
        }
        this.items[value] = value
        return true
    }
    //remove方法
    Set.prototype.remove = function(value){
        if(!this.has(value)) return false
        delete this.items[value]
        return true
    }
    //clear方法
    Set.prototype.clear = function(){
        this.items = {}
    }
    //size方法
    Set.prototype.size = function(){
        return Object.keys(this.items).length
    }
    //values方法  获取set中所有的值
    Set.prototype.values = function(){
        return Object.keys(this.items)
    }
    //union方法 并集
    Set.prototype.union = function(otherSet){
        //this 是A集合    otherSet 是B集合
        //创建新集合 将A中元素add进去,再将B中元素add进去
        let unionSet = new Set()
        let values = this.values()
        for(let i=0;i<values.length;i++){
            unionSet.add(values[i])
        }
        values = otherSet.values()
        for(let i=0;i<values.length;i++){
            unionSet.add(values[i])
        }
        return unionSet
    }
    //intersection 交集
    Set.prototype.intersection = function(otherSet){
        //创建新集合 遍历A,判断元素是否存在于B中
        let intersectionSet = new Set()
        let setA = this.values()
        for(let i = 0;i<setA.length;i++){
            let value = setA[i]
            if(otherSet.has(value)){
                intersectionSet.add(value)
            }
        }
        return intersectionSet
    }
    //diffsection方法  差集
    Set.prototype.diffsection = function(otherSet){
        //创建新集合, 遍历A  判断元素不存在B中
        let diffsection = new Set()
        let setA = this.values()
        for(let i = 0;i<setA.length;i++){
            let value = setA[i]
            if(!otherSet.has(value)){
                diffsection.add(value)
            }
        }
        return diffsection
    }
    //subset方法 子集
    Set.prototype.subset = function(otherSet){
        //创建新集合  遍历A  如果存在不属于B的元素 return false
        let subset = new Set()
        let setA = this.values()
        for(let i = 0;i<setA.length;i++){
            let value = setA[i]
            if(!otherSet.has(value))
                return false
        }
        return true 
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值