js实现集合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.clear方法
            Set.prototype.clear = function () {
                this.items = {};
            }

            //5.返回集合长度
            Set.prototype.size = function () {
                return Object.keys(this.items).length;
            }

            //6.返回集合的属性(元素)
            Set.prototype.values = function () {
                return Object.keys(this.items)
            }

            //集合的操作
            //并集
            Set.prototype.union = function (anotherSet) {
                //创建一个新的集合用来存储并集
                var unionSet = new Set();

                //获取自身的所有元素,遍历并存到新的集合
                var values = this.values();
                for (var i = 0; i < values.length; i++) {
                    unionSet.add(value[i])
                }

                //取出anotherSet中的元素并添加

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

        //Test
        var set = new Set();
        console.log(set.add('dean'));
        console.log(set.add('pig'));
        console.log(set.add('kitten'));
        console.log(set.add('pig'));

        console.log(set.has('xxx'));
        console.log(set.has('pig'));

        console.log(set.size());
        console.log(set.remove('kitten'));
        console.log(set.remove('yyy'));
        console.log(set.values());
        console.log(set.size());

        console.log(set.clear());
        console.log(set.values());

output:
在这里插入图片描述

下面测试一下并集的功能

//Test
        var setA = new Set();
        console.log(setA.add('dean'));
        console.log(setA.add('pig'));
        console.log(setA.add('kitten'));
        console.log(setA.add('pig'));

        var setB = new Set();
        console.log(setB.add(1));
        console.log(setB.add(2));
        console.log(setB.add(3));
        console.log(setB.add(4));
        console.log(setB.add('dean'));

        console.log('Length of setA:' + setA.size());
        console.log('Values of setA:' + setA.values());
        console.log('Length of setB:' + setB.size());
        console.log('Values of setB:' + setB.values());
        var result = setA.union(setB)
        console.log(result);
        console.log('Length of UnionSet:' + result.size());
        console.log('Values of UnionSet:' + result.values());

Output:
在这里插入图片描述

再添加一个求集合的交集功能

//交集
            Set.prototype.intersection = function(anotherSet){
                var intersectionSet = new Set();
                var values = this.values();
                //如果需要交集操作的集合不是空的
                if(!(anotherSet.size() === 0)){
                    console.log('not empty')
                    for(var i=0;i<values.length;i++){
                        console.log(values[i])
                        if(anotherSet.has(values[i])){
                            intersectionSet.add(values[i])
                        }
                    }
                }
                return intersectionSet;
            }
        //Test
        var setA = new Set();
        setA.add('dean');
        setA.add('pig');
        setA.add('kitten');
        setA.add('pig');
        setA.add(3);

        var setB = new Set();
        setB.add(1);
        setB.add('pig');
        setB.add(3);
        setB.add(4);

        var setC = new Set();

        console.log('Length of setA:' + setA.size());
        console.log('Values of setA:' + setA.values());
        console.log('Length of setB:' + setB.size());
        console.log('Values of setB:' + setB.values());
        var result = setA.intersection(setB)
        console.log(result);
        console.log('Length of UnionSet:' + result.size());
        console.log('Values of UnionSet:' + result.values());

        console.log(setA.intersection(setC));

output:
在这里插入图片描述

再添加一个求集合的差集功能

Set.prototype.difference = function(anotherSet){
                var differenceSet = new Set();
                var values = this.values();
                for(var i =0;i<values.length;i++){
                    if(!anotherSet.has(values[i])){
                        differenceSet.add(values[i]);
                    }
                }

                return differenceSet;
            }
        //Test    
		var setA = new Set();
        setA.add('dean');
        setA.add('pig');
        setA.add('kitten');
        setA.add('pig');
        setA.add(3);

        var setB = new Set();
        setB.add(1);
        setB.add('pig');
        setB.add(3);
        setB.add(4);
        console.log(setA.difference(setB));

Output:
在这里插入图片描述

加入差集功能

            //判断anotherSet是否为当前集合的子集,默认是
            Set.prototype.subset = function(anotherSet){
                var values = anotherSet.values();
                var flag = true;
                for(var i=0;i<values.length;i++){
                    if(!this.has(values[i])){
                        return false;
                    }
                }
                return flag;
            }

		//Test
        var setA = new Set();
        setA.add('dean');
        setA.add('pig');
        setA.add('kitten');
        setA.add('pig');
        setA.add(3);

        var setB = new Set();
        setB.add(1);
        setB.add('pig');
        setB.add(3);
        setB.add(4);

        var setC = new Set();

        setC.add('pig');
        setC.add('1');

        console.log('Values of setA:' + setA.values());
        console.log('Values of setB:' + setB.values());
        console.log('Values of setC:' + setC.values());
        console.log(setA.union(setB).subset(setC));
            

在这里插入图片描述

发布了6 篇原创文章 · 获赞 0 · 访问量 35
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览