学习JavaScript数据结构与算法 第七章

三槐 / 2023-05-09 / 原文

7. 集合

7.4 ESMAScript 2015 --- Set 类

ECMAScript 2015 新增了 Set 类作为 JavaScript API 的一部分。我们可以基于 ES2015 的 Set 开发我们的 Set 类。

const set = new Set()

set.add(1)
console.log(set.values())  // @iterator

console.log(set.has(1))
console.log(set.size)

set.add(2)

set.delete(2)

set.clear()
console.log(set)

ES2015 Set 类的运算

我们的 Set 类实现了并集、交集、差集、子集等数学运算,然而 ES2015 原生的 Set 并没有这些功能。

const setA = new Set();
setA.add(1);
setA.add(2);
setA.add(3);

const setB = new Set();
setB.add(2);
setB.add(3);
setB.add(4);


// 1. 模拟并集运算
function union(setA, setB) {
  const unionAb = new Set()

  setA.forEach(value => unionAb.add(value))
  setB.forEach(value => unionAb.add(value))

  return unionAb
}

// 2. 模拟交集运算
function intersection(setA, setB) {
  const intersectionSet = new Set()

  setA.forEach(value => {
    if (setB.has(value)) {
      intersectionSet.add(value)
    }
  })
  return intersectionSet
}

// 3. 模拟差集运算
function difference(setA, setB) {
  const differenceSet = new Set()

  setA.forEach(value => {
    if (!setB.has(value)) {
      differenceSet.add(value)
    }
  })
  return differenceSet
};
console.log(difference(setA, setB))


// 使用扩展运算符

new Set([...setA, ...setB])

new Set([...setA].filter(x => setB.has(x)))

new Set([...setA].filter(x => !setB.has(x)))


7.5 多重集或袋