学习js数据结构与算法-集合(2)

96 阅读2分钟

这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战」。

个人觉得要想进大厂,就必须学习了解算法和数据结构,经历了多次面试之后,也知道了算法和数据结构的重要性,所以,我也打算从今天开始,进入学习,下载了一下电子书,边看书,边跟着书的例子来敲一下代码,下面就开始总结一下对算法和数据结构的学习吧。

第十九天:继续学习集合

  • delete(element)

    下面要实现的是delete

    delete(elemment) {
    	if(this.has(element)) {
        delete this.items[element]
        return true
      }
      return false
    }
    

    我们还是一样,先检查element是否存在与集合中,如果存在就从集合中移除element,返回true,表示元素成功被移除;否则返回false。因为我们使用的对象存储集合的元素,可以简单地使用delete元素符从items对象中移除属性。

  • clear()

    实现clear方法,移除所有元素。

    clear() {
      this.items = {}
    }
    

    要清楚所有的对象,只需要把一个空对象重新赋值给它。我们也可以迭代集合,用delete方法去进行移除所有的元素,不过既然有更简单的方法,这样做就太麻烦了。

  • size()

    下一个要实现的是size方法。该方法有三种实现的方式。

    第一种就是直接使用一个length变量,每当使用add或delete方法时就控制它。

    第二种方式是使用js中Object类的一个内置方法

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

    es6中的Object类中有一个keys方法,它返回一个包含给定对象的属性个数。

    第三种就是手动提取items对象的每一个属性。

    size() {
      let count = 0
      for(let key in this.items) {
        if(this.items.hasOwnProperty(key)){
          count++
        }
      }
      return count
    }
    

    迭代items对象的所有属性,检查它们是否是对象自身的属性。如果是,就递增count变量的值,最后在方法结束时返回这个数。

  • values

    要实现values方法,我们一样可以使用es6的对象的方法

    values() {
      return Object.values(this.items)
    }
    

    如果想要在任何浏览器都能执行,可以下面这样写

    values() {
      let values = [];
      for(let key in this.items) {
        if(this.items.hasOwnProperty(key)){
          values.psuh(key)
        }
      }
      return values
    }
    

    首先迭代对象的所有属性,吧他们添加到一个数组中,并返回这个数组。