JS_数据结构——集合

利用ES5实现集合其实和字典很像,只不过在集合种,键=值,这样就可以确保了集合的互异性,代码如下:

var Set2=function()
{
    var items={} //同字典的实现,为空对象类型
    var length=0
    this.has=function(element)
    {
        return items.hasOwnProperty(element) //过滤到继承属性
    }
    this.add=function(element){
        if(!this.has(element))
        {
            items[element]=element //这里使用[]的原因是,要动态访问并且修改 不可用.语法 这里的element为字符串
            length++
            return element

        }
        else{
            return false
        }
    }
    this.remove=function(element)
    {
        if(this.has(element))
        {
            delete items[element]
            length--
            return true
        }
        else{
            return false
        }


    }
    this.value=function()
    {
        var item=[]
        for (var i in items)
        {
            if(items.hasOwnProperty(i))
            {
                item.push(items[i])
            }
        }
        return item
    }
    this.size_1=function()
    {
        return length
    }
    this.size_2=function()
    {
        var count=0
        
        for(var i in items) //遍历其键
        {
            if(items.hasOwnProperty(i) ) //检查他自己是否有i这个属性,确保该属性是他自己的而不是继承来的
            {
            count++}
        }
        return count

    }
    this.size_3=function() //静态方法的使用 IE6不兼容 Object.key()获取其键 作为数组返回
    {
        return Object.keys(items).length

    }
    //并集实现
    this.union=function(otherSet)
    {
        var resultSet=new Set2()
        var arr=this.value()  //提取自己的值
        for(var i=0;i<arr.length;i++ )
        {
            resultSet.add(arr[i])
        }
        var arr=otherSet.value() //要并的集合的值
        for(var i=0;i<arr.length;i++ )
        {
            resultSet.add(arr[i])
        }
        return resultSet


    }
    //交集
    this.intersection=function(otherSet)
    {
        var arr=this.value()
        var resultSet=new Set2()
        
        for(var i=0;i<arr.length;i++)
        {
            if(otherSet.has(arr[i]))
            {
                resultSet.add(arr[i])
            }
            
        }
        return resultSet

        
    }
    //差集是交集的相反实现
    this.difference=function(otherSet)
    {
        var resultSet=new Set2()
        var arr=this.value()
        for(var i=0;i<arr.length;i++)
        {
            if(!otherSet.has(arr[i]))
            {
                resultSet.add(arr[i])
            }
        }
        return resultSet
    }
}

在es6中已经新引入了set()直接var b=new Set(),即可生成一个b集合,它自带add、clear、delete、has、key、value、entries、forEach方法,key和value返回值相同。直接来看一下交集并集差集的实现:

var union=new Set([...s,...b]) //...拆分对象
var intersection=new Set([...s].filter(value=>b.has(value)))
//filter方法可以将()中执行后weitue
var difference=new Set([...s].filter(value=>!b.has(value)))
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值