文章目录

  • 一、什么是集合?
  • 1.1 集合的常见方法
  • 1.2 常见方法的实现
  • 二、集合间的操作
  • 2.1 集合间的常见操作
  • 2.2 并集 返回一个包含两个集合所有元素的集合
  • 2.3 交集 集合A中的元素同时存在于集合B中
  • 2.4 差集 存在于A中,不存在于B中
  • 3.2 子集 A中的每一个元素都存在于B


一、什么是集合?

jquery 将一个数据集合添加到另个集合中 js中集合添加数据_数据结构

1.1 集合的常见方法

jquery 将一个数据集合添加到另个集合中 js中集合添加数据_JS实现集合_02

1.2 常见方法的实现

function Set() {
  // 属性
  this.items = {}

  // 方法
  // 1.add 向集合添加一个新的项
  Set.prototype.add = function (value) {
    // 判断当前集合中是否已经包含了该元素
    if (this.has(value)) return false

    // 将元素添加到集合中
    this.items[value] = value
    return true
  }

  // 2.has 判断值是否在集合中
  Set.prototype.has = function (value) {
    // 判断某个对象是否含有指定的属性
    return this.items.hasOwnProperty(value)
  }

  // 3.remove(remove) 删除指定的元素
  Set.prototype.remove = function (value) {
    // 1.判断是否包含要删除的元素
    if(!this.has(value)) return false

    // 2.将元素从属性中删除
    delete this.items[value]
    return true
  }

  // 4.clear 清空
  Set.prototype.clear = function (){
    this.items = {}
  }

  // 5.size方法 获取集合中的元素个数
  Set.prototype.size = function (){
    return Object.keys(this.items).length 
  }
  
  // 6.values 获取集合中所有的值
  Set.prototype.values = function (){
    return Object.keys(this.items)
  }
}

测试代码:

// 测试
let set = new Set()

// 1.测试add
console.log(set.add('a'));
console.log(set.add('a'));
console.log(set.add('b'));
console.log(set.add('c'));

// 2.测试 values
console.log(set.values());

// 3.测试 remove
console.log(set.remove('c'));
console.log(set.remove('c'));

// 4.测试size
console.log(set.size());

// 5.测试 has
console.log(set.has('a'));

// 6.测试 clear
console.log(set.values())
console.log(set.clear());
console.log(set.values())

测试结果:

jquery 将一个数据集合添加到另个集合中 js中集合添加数据_JS实现集合_03

二、集合间的操作

2.1 集合间的常见操作

jquery 将一个数据集合添加到另个集合中 js中集合添加数据_数据结构_04

2.2 并集 返回一个包含两个集合所有元素的集合

// 1.并集
Set.prototype.union = function (otherSet) {
  // this:集合对象A
  // otherSet:集合对象B
  // 1.创建一个新的集合
  let unionSet = new Set()

  // 2.将A集合中所有元素添加到新集合中
  let values = this.values()
  for (let i = 0; i < values.length; i++) {
    unionSet.add(values[i])
  }

  // 3.取出B集合中的元素,判断是否需要加入到新集合
  values = otherSet.values()
  for (let i = 0; i < values.length; i++) {
    unionSet.add(values[i])
  }
  return unionSet
}

测试代码:

// 1.创建两个集合,并且添加元素
let setA = new Set()
setA.add('a')
setA.add('b')
setA.add('c')

let setB = new Set()
setB.add('aa')
setB.add('bb')
setB.add('c')
// 1.求两个集合的并集
console.log('求并集:=》', setA.union(setB));

测试结果:

jquery 将一个数据集合添加到另个集合中 js中集合添加数据_数据结构_05

2.3 交集 集合A中的元素同时存在于集合B中

// 2.交集
Set.prototype.intersection = function (otherSet) {
  // this:集合A
  // otherSet:集合B
  // 1.先创建一个新的集合
  let intersectionSet = new Set()

  // 2.从A中取出一个个元素,判断是否同时存在于集合B,是则存放入新集合
  let values = this.values()
  for (let i = 0; i < values.length; i++) {
    let item = values[i]
    if (otherSet.has(item)) {
      intersectionSet.add(item)
    }
  }
  return intersectionSet
}

测试代码:

// 1.创建两个集合,并且添加元素
let setA = new Set()
setA.add('a')
setA.add('b')
setA.add('c')

let setB = new Set()
setB.add('aa')
setB.add('bb')
setB.add('c')
// 2.求交集
console.log('求交集:=》',setA.intersection(setB));

测试结果:

jquery 将一个数据集合添加到另个集合中 js中集合添加数据_JS_06

2.4 差集 存在于A中,不存在于B中

Set.prototype.difference = function (otherSet) {
  // this:集合A
  // otherSet:集合B
  // 1.创建一个新的集合
  let differenceSet = new Set()

  // 2.取出A中的一个个元素,判断是否存在于B中,不存在,则添加到新集合中
  let values = this.values()
  for (let i = 0; i < values.length; i++) {
    let item = values[i]
    if (!otherSet.has(item)) {
      differenceSet.add(item)
    }
  }
  return differenceSet
}

测试代码:

// 1.创建两个集合,并且添加元素
let setA = new Set()
setA.add('a')
setA.add('b')
setA.add('c')

let setB = new Set()
setB.add('aa')
setB.add('bb')
setB.add('c')

// 3.求差集
console.log('求差集:=》', setA.difference(setB));

测试结果:

jquery 将一个数据集合添加到另个集合中 js中集合添加数据_集合_07

3.2 子集 A中的每一个元素都存在于B

// 4.子集
Set.prototype.subset = function (otherSet) {
  // 遍历集合A中的所有元素,如果都存在于B中,则返回true,
  // 只要有不存在于B中的,则放回false
  let values = this.values()
  for (let i = 0; i < values.length; i++) {
    let item = values[i]
    if (!otherSet.has(item)) {
      return false
    }
    return true
  }
}

测试代码:

// 1.创建两个集合,并且添加元素
let setA = new Set()
setA.add('a')
setA.add('b')
setA.add('c')

let setB = new Set()
setB.add('aa')
setB.add('bb')
setB.add('c')

let setC = new Set()
setC.add('a')
setC.add('b')
setC.add('c')
setC.add('d')

// 4.子集
console.log('求子集:=》', setA.subset(setB));  // A是不是B的子集
console.log('求子集:=》', setA.subset(setC));  // A是不是C的子集

测试结果:

jquery 将一个数据集合添加到另个集合中 js中集合添加数据_js_08