美文网首页
JS数据结构和算法 - 集合

JS数据结构和算法 - 集合

作者: 前端小白的摸爬滚打 | 来源:发表于2022-02-20 21:19 被阅读0次

什么是集合?

集合是由一组无序唯一的元素组成(集合中没有重复项 - 集合中的元素使用===来判断是否相同)

实现一个集合


function Set() {
    let items = {};
}

注意一个细节,我们使用一个对象而不是数组来表示集合。原因:JS中对象不能有相同的key,可以用来保证集合的元素具有唯一性

需要实现的方法

  • add(value)

  • remove(value)

  • has(value)

  • clear()

  • size()

  • values()

function Set() {
  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 () {
    return Object.keys(items).length;
  }

  this.values = function () {
    return Object.keys(items);
  }

  this.union = function (otherSet) {
    const set = new Set();
    const values = this.values();
    const otherValues = otherSet.values();
    for (let i = 0; i < values.length; i++) {
      set.add(values[i]);
    }
    for (let i = 0; i < otherValues.length; i++) {
      set.add(otherValues[i])
    }
    return set;
  }

  this.intersection = function (otherSet) {
    const set = new Set();
    const values = this.values();
    for (let i = 0; i < values.length; i++) {
      if (otherSet.has(values[i])) {
        set.add(values[i]);
      }
    }
    return set;
  }

  this.difference = function (otherSet) {
    const set = new Set();
    const values = this.values();
    for (let i = 0; i < values.length; i++) {
      if (!otherSet.has(values[i])) {
        set.add(values[i])
      }
    }
    return set;
  }
  // 判断当前集合是不是otherSet的子集
  this.subset = function (otherSet) {
    if (this.size() > otherSet.size()) return false;
    const values = this.values();
    for (let i = 0; i < values.length; i++) {
      if (!otherSet.has(values[i])) return false;
    }
    return true;
  }
}

集合的操作

  • 并集

  • 交集

  • 差集

  • 子集

相关文章

  • 数据结构与算法

    参考链接:算法 数据结构与算法 iOS数据结构 和 算法 上 算法 1、数据结构: 集合结构: 线性结构: 树形结...

  • JS数据结构和算法 - 集合

    什么是集合? 集合是由一组无序且唯一的元素组成(集合中没有重复项 - 集合中的元素使用===来判断是否相同) 实现...

  • 数据结构与算法 全家桶

    数据结构:数据集合的存储结构。算法:操作数据的方法集合。相互关系:数据结构是为算法服务的,算法要作用在特定的数据结...

  • Dart语言的集合(collection)

    Dart语言的集合 程序就是数据和函数的集合,也有称为数据结构和算法的集合。无论那种分法,如何存储数据、如何处理数...

  • JS数据结构与算法-集合

    定义 集合是由一组无序且唯一(即不能重复)的项组成。可以把集合想象成一个既没有重复元素,也没有顺序概念的数组。 创...

  • js数据结构与算法_集合

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

  • 历经一年准备我终于进大厂了!(学习总结 & BAT面试分享)

    目录 概述 成果和收获 面试分享AndroidJVMJava 线程Java 集合网络数据结构和算法 写在最后 概述...

  • js数据结构和算法

    js数据结构和算法学习(一) 本系列内容来源《学习Javascipt数据结构与算法》,源文件使用es5代码编写,在...

  • 数据结构—树

    应用本身就是算法和数据结构和集合,做一段时间应用开发,最近有时间总结一些有关数据结构和算法的知识,希望提供自己开发...

  • 工作消失而面试却长存的算法与数据结构

    工作消失而面试却长存的算法与数据结构: 优秀的算法和数据结构被封装到了Java的集合框架之中 数据结构考点: 数组...

网友评论

      本文标题:JS数据结构和算法 - 集合

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