JS数据结构和算法 - 集合

2022-02-20  本文已影响0人  前端小白的摸爬滚打

什么是集合?

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

实现一个集合


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

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

需要实现的方法

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;
  }
}

集合的操作

上一篇 下一篇

猜你喜欢

热点阅读