集合 -- es5实现

2018-06-21  本文已影响0人  安石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
  }
}
上一篇下一篇

猜你喜欢

热点阅读