当前位置:首页 > JavaScript

js 实现集合

2026-03-15 05:20:35JavaScript

实现集合的基本方法

在JavaScript中,集合(Set)是一种无序且元素唯一的数据结构。可以使用原生Set对象或手动实现类似功能。

使用原生Set对象:

const mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(1); // 重复元素不会被添加
console.log(mySet.size); // 输出2

手动实现集合类:

class MySet {
  constructor() {
    this.items = {};
  }

  has(element) {
    return Object.prototype.hasOwnProperty.call(this.items, element);
  }

  add(element) {
    if (!this.has(element)) {
      this.items[element] = element;
      return true;
    }
    return false;
  }

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

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

集合操作的方法

实现并集(union)操作:

union(otherSet) {
  const unionSet = new MySet();
  Object.values(this.items).forEach(value => unionSet.add(value));
  Object.values(otherSet.items).forEach(value => unionSet.add(value));
  return unionSet;
}

实现交集(intersection)操作:

intersection(otherSet) {
  const intersectionSet = new MySet();
  Object.values(this.items).forEach(value => {
    if (otherSet.has(value)) {
      intersectionSet.add(value);
    }
  });
  return intersectionSet;
}

实现差集(difference)操作:

difference(otherSet) {
  const differenceSet = new MySet();
  Object.values(this.items).forEach(value => {
    if (!otherSet.has(value)) {
      differenceSet.add(value);
    }
  });
  return differenceSet;
}

集合的扩展功能

实现子集判断:

isSubsetOf(otherSet) {
  return Object.values(this.items).every(value => 
    otherSet.has(value)
  );
}

实现集合转数组:

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

实现清空集合:

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

ES6 Set的高级用法

使用扩展运算符进行集合操作:

const setA = new Set([1, 2, 3]);
const setB = new Set([2, 3, 4]);

// 并集
const union = new Set([...setA, ...setB]);

// 交集
const intersection = new Set([...setA].filter(x => setB.has(x)));

// 差集
const difference = new Set([...setA].filter(x => !setB.has(x)));

使用Set进行数组去重:

js 实现集合

const arr = [1, 2, 2, 3, 4, 4];
const uniqueArr = [...new Set(arr)];

标签: js
分享给朋友:

相关文章

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…