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)))