JavaScript数据结构与算法 -- 集合 Set

1.集合结构

  • 集合比较常见的实现方式是 哈希表(后续讲解到),我们这里来实现一个封装的集合类。
  • 集合通常是由一组无序的,不能重复的元素构成

2.特殊的数组

  • 特殊之处在于里面的元素没有顺序,也不能重复。

  • 没有顺序意外这不能通过下标来进行访问,不能重复意味着相同的对象再集合中只能存在一份。

  • 因为ES6里面已经实现了Set类

  • 我们为了明确集合的内部实现方式,这里自己封装一下Set类。

3.封装集合类

 //封装集合类
        function Set(){
            //封装属性  因为数组允许元素重复,所以我们使用Object对象
            this.items = {},

            //封装方法
        }

4.封装集合的方法

  • add(value): 向集合添加一个新的项
 //add
    Set.prototype.add = function(value){
        //判断当前集合中是否已经包含了这个元素
        if(this.has(value)){
            return false
        }
        //将元素添加进集合
        this.items[value] = value;
        return true;
    }
  • remove(value): 移除一个元素
//Set
    Set.prototype.has = function(value){
        return this.items.hasOwnProperty(value);
    }
  • has(value): 判断有没有某个元素
//remove
    Set.prototype.remove = function(value){
        //判断当前集合中是否已经包含了这个元素
        if(!this.has(value)){
            return false
        }

        //删除元素
        delete this.items[value];
        return true;
    }
  • clear():清空集合
//clear
    Set.prototype.clear = function(){
        // 重新赋值一个新对象
        this.items = {};
        return true;
    }
  • size(): 返回集合的元素数量
//size
    Set.prototype.size = function(){
        return Object.keys(this.items).length;
    }
  • values() : 返回一个包含集合中所有元素的数组
//values
    Set.prototype.values = function(){
        return Object.keys(this.items);
    }

5.集合的完整代码实现

//封装集合类
    function Set(){
        //封装属性  因为数组允许元素重复,所以我们使用Object对象
        this.items = {},

        //封装方法
        //add
        Set.prototype.add = function(value){
            //判断当前集合中是否已经包含了这个元素
            if(this.has(value)){
                return false
            }
            //将元素添加进集合
            this.items[value] = value;
            return true;
        }

        //Set
        Set.prototype.has = function(value){
            return this.items.hasOwnProperty(value);
        }

        //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 = {};
            return true;
        }

        //size
        Set.prototype.size = function(){
            return Object.keys(this.items).length;
        }

        //获取所有值
        Set.prototype.values = function(){
            return Object.keys(this.items);
        }
    }
    var set = new Set();
发布了85 篇原创文章 · 获赞 16 · 访问量 6092

猜你喜欢

转载自blog.csdn.net/qq_43955202/article/details/104584983