js数据结构——集合Set

集合是一组无序且唯一(即不能重复)的项组成的。

1.创建一个集合

 function Set(){
        this.items = {};
        if(Set.prototype.has != 'function'){
            //判断集合是否有某值
            Set.prototype.has = function(value){
                return this.items.hasOwnProperty(value)
            };
            //向集合中添加元素
            Set.prototype.add = function(value){
                if(!this.has(value)){
                    this.items[value] = value;
                    return true;
                }
                return false;
            };
            //移除集合中某个元素
            Set.prototype.remove = function(value){
                if(this.has(value)){
                    delete this.items[value];
                }
                return false;
            };
            //清空集合
            Set.prototype.clear = function(){
                this.items = {};
            };
            //获取集合有多少项
            Set.prototype.size = function(){
                return Object.keys(this.items).length;
            }
            //获取集合的所有项,以数组返回
            Set.prototype.values = function(){
                return Object.keys(this.items);
            }
        }
    }

(1)首先要写一个has()方法,判断Set中是否有某个元素,这个会被remove()和add()方法使用。因为,没有这个元素不能删除,Set中无重复元素(不能添加重复元素)。

(2)因为items是对象,删除对象的属性,直接用delete就好了

(3)hasOwnProperty()判断实例自身(不属于原型对象)是否有某个的属性

(4)Object.keys()获取实例自身(不属于原型对象)的所有可枚举属性

补充

(5)getOwnPropertyNames()返回实例的所有属性,无论是否可枚举。

(6)for…in…,只不返回原型对象中的不可枚举属性

 2.使用Set类

var set = new Set();
    set.add(1);
    set.add(2);
    set.add(3);
    console.log(set.values());  //["1","2","3"]
    console.log(set.values());  //["1","2","3"]
    console.log(set.has(1));    //true
    console.log(set.size());    //3
    set.remove(2);
    console.log(set.values());  //["1","3"]
    console.log(set.remove(4)); //false
    console.log(set.values());  //["1","3"]
    set.clear();
    console.log(set.values());  //[]

3.Set操作——交,并,差

//交
            Set.prototype.union = function(otherSet){
                var unionSet = new Set();
                var values = this.values();
                console.log(values);
                for(var i = 0;i < values.length;i++){
                    unionSet.add(values[i]);
                }
                values = otherSet.values();
                for(var i = 0;i < values.length;i++){
                    unionSet.add(values[i]);
                }
                return unionSet;
            };
//并
            Set.prototype.intersection = function(otherSet){
                var intersection = new Set();
                var values = this.values();
                for(var i = 0;i < values.length;i++){
                    if(otherSet.has(values[i])){
                        intersection.add(values[i]);
                    }
                }
                return intersection;
            };
//差
            Set.prototype.difference = function(otherSet){
                var differenceSet = new Set();
                var values = this.values();
                for(var i = 0;i < values.length;i++){
                    if(!otherSet.has(values[i])){
                        differenceSet.add(values[i]);
                    }
                }
                return differenceSet;
            }

测试结果

var set = new Set();
    set.add(1);
    set.add(2);
    set.add(3);
    var set1 = new Set();
    set1.add(1);
    set1.add(4);
    set1.add(5);
    var unionSet = set.union(set1);
    console.log(unionSet.values());             //["1", "2", "3", "4", "5"]
    var intersection = set.intersection(set1);
    console.log(intersection.values());         //["1"]
    var differenceSet = set.difference(set1);
    console.log(differenceSet.values());        //["2", "3"]

 

转载于:https://my.oschina.net/wyc1219/blog/829826

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值