美文网首页前端杂记
集合的javascript实现

集合的javascript实现

作者: 会飞小超人 | 来源:发表于2019-01-16 15:31 被阅读0次

集合是由一组无序且唯一(即不能重复)的项组成的。这个数据结构使用了与有限集合相同的数学概念,但应用在计算机科学的数据结构中。ES6也有原生Set类的实现。集合李包含下面这些方法:has、add、remove、clear、size、values。同时两个集合之间还会有这些操作:并集(union)、交集(interaction)、差集(difference)、子集(subset)。

Set类的实现

function MySet(){
  let items={}

  this.has=function(value){
    return items.hasOwnProperty(value)
  }

  this.add=function(value){
    if(this.has(value)){
      items[value]=value
      return true
    }
    return false
  }

  this.remove=function(value){
    if(this.has(value)){
      delete items[value]
      return true
    }
    return false
  }

  this.clear=function(){
    items={}
  }

  this.size=function(){
    let keys=Object.keys(items)
    return keys.length
  }

  this.values=function(){
    let keys=Object.keys(items)
    return keys.map(key=>items[key])
  }

  this.union=function(otherSet){ // 并集
    let unionSet=new MySet()

    let values=this.values()
    for(let i=0;i<values.length;i++){
      unionSet.add(values[i])
    }

    values=otherSet.values()
    for(let i=0;i<values.length;i++){
      unionSet.add(values[i])
    }

    return unionSet
  }

  this.intersection=function(otherSet){ // 交集
    let intersectionSet=new MySet()

    let values=this.values()
    for(let value of values){
      if(otherSet.has(value)){
        intersectionSet.add(value)
      }
    }

    return intersectionSet
  }

  this.difference=function(otherSet){ // 差集
    let differenceSet=new MySet()
    
    let values=this.values()
    for(let value of values){
      if(!otherSet.has(value)){
        differenceSet.add(value)
      }
    }

    return differenceSet
  }

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

ES6 Set类的扩展

ES6实现了原生的Set类,不过它是基于数组的。因此创建一个实例是这样:new Set(arr)。Set类里基本也包含了上面的一些方法,但是没有类之间的操作。下面在原生的Set类基础上实现扩展。

Set.prototype.union=function(otherSet){
  let unionSet=new Set()
  for(let x of this){
    unionSet.add(x)
  }
  for(let x of otherSet){
    unionSet.add(x)
  }

  return unionSet
}

Set.prototype.intersection=function(otherSet){
  let intersectionSet=new Set()
  for (let x of this){
    if(otherSet.has(x)){
      intersectionSet.add(x)
    }
  }
  return intersectionSet
}

Set.prototype.difference=function(otherSet){
  let differenceSet=new Set()
  for(let x of this){
    if(!otherSet.has(x)){
      differenceSet.add(x)
    }
  }
  return differenceSet
}

Set.prototype.subset=function(otherSet){
  if(this.size<otherSet.size){
    return false
  }
  for(let x of this){
    if(!otherSet.has(x)){
      return false
    }
  }
  return true
}

相关文章

  • 集合的javascript实现

    集合是由一组无序且唯一(即不能重复)的项组成的。这个数据结构使用了与有限集合相同的数学概念,但应用在计算机科学的数...

  • javascript 面向对象技术

    javascript类的实现: 1.集合类 set.js 送人玫瑰,手留余香。

  • 学习javascript数据结构(三)——集合

    前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合。 原文博客地址:学习jav...

  • JavaScript 数据结构之集合

    一、 集合的介绍 几乎每一种编程语言中,都有集合结构, 常见是实现方式是哈希表,这里我们使用 JavaScript...

  • JS-Basic

    本文主要结构 任务JavaScript基础练习JavaScript集合练习 JavaScript基础练习学到的主要...

  • Javascript 集合

    集合的特点是不包含重复元素,集合的元素通常无顺序之分。在系统编程中集合很常用,但是并非所有语言都原生支持集合。集合...

  • JavaScript练习

    github地址: JavaScript基础练习basic practice 1 JavaScript集合练习pr...

  • 任务三——JS练习(个人)

    Javascript基础练习 js-basic-practice-1 Javascript集合练习 pre-pos...

  • 前端常见数据结构小结

    常见数据结构的 JavaScript 实现 栈 队列 链表 集合 字典 哈希表 二叉树 图 前端与数据结构 数据结...

  • ES6 中迭代器和生成器

    《深入理解ES6》阅读随笔 在 ES5 及以前,Javascript 中在实现集合遍历时,都是通过变量记录的方式来...

网友评论

    本文标题:集合的javascript实现

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