美文网首页
集合 -- es5实现

集合 -- es5实现

作者: 安石0 | 来源:发表于2018-06-21 00:11 被阅读0次

    集合是由一组无序且唯一(不能重复的)的项组成,这个数据结构与有限集合相同的数学概念,但应用在计算机科学的数据结构中。
    es6中set类:ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值.

    1,es5的方法实现es6的方法

    es6-set 阮一峰

    function mySet(){
      let items = {};
      this.size = function(){
        return Object.keys(items).length
      }
      this.has = function(value){
        items.hasOwnProperty(value)
      }
      this.add = function (value){
        if(!this.has[value]){
          items[value] = value
          return true 
        } 
          return false
      }
      this.keys = function(){
        return Object.keys(items)
      }
      this.values = function(){
        return Object.values(items)
      }
      this.clear = function(){
        items = {}
      }
      this.delete = function(value){
        if(this.has(value)){
          delete items[value]
          return true
        }
          return false
      }
    }
    

    2, 集合的操作

    集合操作图解.png
    2.1 并集
    mySet增加一个方法
    this.union = function(B){
        let unionSet = new mySet()
        let values = this.values()
        for(let i=0;i<values.length;i++){
          unionSet.add(values[i])
        }
        values = B.values()
        for(let i=0;i<values.length;i++){
          unionSet.add(values[i])
        }
        return unionSet  
      }
    

    2.2交集

     this.overlap=function(B){
      let overlapSet = new mySet()
      let values = this.values() 
      let overlapArr = values.filter(v=>B.has(v))
      
      for(let i=0;i<overlapArr.length;i++){
        overlapSet.add(overlapArr[i])
      }
        return overlapSet
    }
    

    2.3差集

     this.diffSet=function(B){
      let diffSet = new mySet()
      let values = this.values()
      for(let i =0;i<values.length;i++){
        if(!B.has(values[i])){
           diffSet.add(values[i])   
        }
      }
       return diffSet
      }
    

    结果如图

    image.png
    2.4子集
     this.subset=function(B){
        if(this.size()>B.size()){
          return false
        }
        let values = this.values
        for(let i=0;i<values.length;i++){
          if(!B.has(values[i])){
            return false
          }
        }
        return true
      }
    

    3 所有代码

    function mySet(){
      let items = {};
      this.size = function(){
        return Object.keys(items).length
      }
      this.has = function(value){
        return items.hasOwnProperty(value)
      }
      this.add = function (value){
        if(!this.has[value]){
          items[value] = value
          return true 
        } 
          return false
      }
      this.keys = function(){
        return Object.keys(items)
      }
      this.values = function(){
        return Object.values(items)
      }
      this.clear = function(){
        items = {}
      }
      this.delete = function(value){
        if(this.has(value)){
          delete items[value]
          return true
        }
          return false
      }
      this.union = function(B){
        let unionSet = new mySet()
        let values = this.values()
        for(let i=0;i<values.length;i++){
          unionSet.add(values[i])
        }
        values = B.values()
        for(let i=0;i<values.length;i++){
          unionSet.add(values[i])
        }
        return unionSet  
      }
      this.overlap=function(B){
      let overlapSet = new mySet()
      let values = this.values() 
      let overlapArr = values.filter(v=>B.has(v))
      
      for(let i=0;i<overlapArr.length;i++){
        overlapSet.add(overlapArr[i])
      }
        return overlapSet
    }
      this.diffSet=function(B){
      let diffSet = new mySet()
      let values = this.values()
      for(let i =0;i<values.length;i++){
        if(!B.has(values[i])){
           diffSet.add(values[i])   
        }
      }
       return diffSet
      }
      this.subset=function(B){
        if(this.size()>B.size()){
          return false
        }
        let values = this.values
        for(let i=0;i<values.length;i++){
          if(!B.has(values[i])){
            return false
          }
        }
        return true
      }
    }
    

    相关文章

      网友评论

          本文标题:集合 -- es5实现

          本文链接:https://www.haomeiwen.com/subject/qvhfyftx.html