javascript 实现集合及一系列的操作

javascript 实现集合及一系列的操作

//封装Set类

function Set() {
    this.items = {}

    //1、add() 方法
    Set.prototype.add = function (value) {
        if (this.has(value)) { //如果存在就不能添加
            return false
        }
        this.items[value] = value //不存在就添加到集合中
        return true
    }

    //2、has()方法 判断是否存在集合中
    Set.prototype.has = function (value) {
        return this.items.hasOwnProperty(value)
    }

    //3、remove() 方法
    Set.prototype.remove = function (value) {
        //判断元素是否存在集合中
        if (!this.has(value)) {
            return false
        }

        //删除元素
        delete this.items[value]
        return true
    }

    //4、cleat()方法 清空集合
    Set.prototype.clear = function () {
        this.items = {}
    }

    //5、size()方法
    Set.prototype.size = function () {
        return Object.keys(this.items).length
    }

    //获取集合中所有的值
    Set.prototype.values = function () {
        return Object.keys(this.items)
    }

    //并集操作
    Set.prototype.union = function (otherSet) {
        let unionSet = new Set()

        let values = this.values()
        for (let i = 0 ;i < values.length; i++) {
            unionSet.add(values[i])
        }

        let otherValues = otherSet.values()
        for (let i = 0 ;i < otherValues.length; i++) {
            unionSet.add(otherValues[i])
        }

        return unionSet
    }

    //交集
    Set.prototype.intersection = function (otherSet) {
        let intersectionSet = new Set()

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

    //差集
    Set.prototype.difference = function (otherSet) {
        let differenceSet = new Set()

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

    //子集 是否为该集合的子集
    Set.prototype.subset = function (otherSet) {

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

测试代码:

const set = new Set()

console.log(set.add('aa'));
console.log(set.add('aa'));
console.log(set.add('bb'));
console.log(set.add('cc'));
console.log(set.add('ee'));

console.log(set.has('aa'))
console.log(set.remove('aa'))
console.log(set.values())
console.log(set.size())
set.clear()
console.log(set.values())


const setA = new Set()
setA.add('a')
setA.add('b')
setA.add('e')
setA.add('c')
setA.add('d')

const setB = new Set()
// setB.add('f')
// setB.add('g')
// setB.add('h')
setB.add('c')
setB.add('d')

console.log(setA.union(setB));
console.log(setA.intersection(setB));
console.log(setA.difference(setB))
console.log(setA.subset(setB))

结果:

true
false
true
true
true
true
true
[ 'bb', 'cc', 'ee' ]
3
[]
Set { items: { a: 'a', b: 'b', e: 'e', c: 'c', d: 'd' } }
Set { items: { c: 'c', d: 'd' } }
Set { items: { a: 'a', b: 'b', e: 'e' } }
true


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值