Brief
The Set allow you to store unique values of any type(primitive values or object references).
Syntax
// iterable: iterable object
// If an iterable object is passed, all of its elements will be added into the new Set.
// And null will be treated as undefined
new Set([iterable])
Special Case
new Set([NaN, NaN]);
// Set(1) {NaN}
// Although NaN !== NaN, NaN will be regarded as same in Set
Methods
const set = new Set();
// add
set.add(1);
set.add(2);
set.add(3);
// delete
set.delete(1);
// clear
set.clear();
// has
set.has(1); // true
// keys
for (let item of mySet.keys()) console.log(item); // 2 3
// values
for (let item of mySet.values()) console.log(item); // 2 3
// entries
for (let [key, value] of mySet.entries()) console.log(key); // 2 3
// forEach
mySet.forEach((value) => {
console.log(value);
}); // 2 3
Some Usages
function isSuperset(set, subset) {
for (let elem of subset) {
if (!set.has(elem)) {
return false;
}
}
return true;
}
function union(setA, setB) {
let _union = new Set(setA);
for (let elem of setB) {
_union.add(elem);
}
return _union;
}
function intersection(setA, setB) {
let _intersection = new Set();
for (let elem of setB) {
if (setA.has(elem)) {
_intersection.add(elem);
}
}
return _intersection;
}
function symmetricDifference(setA, setB) {
let _difference = new Set(setA);
for (let elem of setB) {
if (_difference.has(elem)) {
_difference.delete(elem);
} else {
_difference.add(elem);
}
}
return _difference;
}
function difference(setA, setB) {
let _difference = new Set(setA);
for (let elem of setB) {
_difference.delete(elem);
}
return _difference;
}