js封装集合(包括集合之间的操作)

集合是由一组无序的、但不能重复的元素构成的。 我们可以把集合看成一个特殊的数组,特殊之处在于里面的元素,没有顺序,也不能重复

代码实现

function Set1() {
    //定义属性
    this.items = {}


    //判断集合里是否存在指定元素has()
    Set1.prototype.has = function(value) {
        return this.items.hasOwnProperty(value)
    }


    //往集合添加元素add()
    Set1.prototype.add = function(value) {
        if (this.has(value)) return false

        this.items[value] = value
        return true
    }

    //删除指定元素remove()
    Set1.prototype.remove = function(value) {
        if (!this.has(value)) return false

        delete this.items[value]
        return true
    }

    //获取集合元素个数size()
    Set1.prototype.size = function() {
        return Object.keys(this.items).length
    }

    //清空集合clear()
    Set1.prototype.clear = function() {
        this.items = {}
    }

    //获取集合元素getValue()
    Set1.prototype.getValue = function() {
        return Object.values(this.items)
    }

    //集合之间的操作
    //求并集union()
    Set1.prototype.union = function(otherSet) {

        //1.创建新集合
        var unionSet = new Set1()

        //2.取出集合A的元素放入新集合中
        var values = this.getValue()
        for (let i = 0; i < values.length; i++) {
            unionSet.add(values[i])
        }

        //3.取出集合B里的元素,也放入新集合
        values = otherSet.getValue()
        for (let i = 0; i < values.length; i++) {
            //这里不用担心放入重复元素,add()方法已经判断过了
            unionSet.add(values[i])
        }

        return unionSet

    }

    //求交集
    Set1.prototype.intersection = function(otherSet) {
        //1.创建新集合
        var intersectionSet = new Set1()
            //2.取出集合A元素
        var values = this.getValue()
        for (let i = 0; i < values.length; i++) {
            //3.判断集合B里是否有这个元素
            if (otherSet.has(values[i])) {
                //有就放入新集合
                intersectionSet.add(values[i])
            }
        }

        return intersectionSet
    }

    //求差集
    Set1.prototype.different = function(otherSet) {
        var differentSet = new Set1()

        var values = this.getValue()

        for (let i = 0; i < values.length; i++) {
            if (!otherSet.has(values[i])) {
                differentSet.add(values[i])
            }
        }

        return differentSet
    }

    //求子集
    Set1.prototype.subset = function(otherSet) {

        var values = this.getValue()

        for (let i = 0; i < values.length; i++) {
            if (!otherSet.has(values[i])) {
                return false
            }
        }

        return true
    }
}

测试代码

var setA = new Set1()
setA.add('aa')
setA.add('bb')
setA.add('cc')
setA.remove('aa')

console.log(setA.has('aa'));
console.log(setA.size());
console.log(setA.getValue());

输出: alt

var setB = new Set1()
setB.add('11')
setB.add('22')
setB.add('33')
setB.add('cc')

var unionSet = setA.union(setB)
console.log(unionSet.getValue());

var intersectionSet = setA.intersection(setB)
console.log(intersectionSet.getValue());

var differentSet = setA.different(setB)
console.log(differentSet.getValue());

输出:alt

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务