Set in JavaScript
Values in a new Set()
are unique, they only occur once. You can mySet.add()
, mySet.delete()
, mySet.clear()
. You can check its mySet.size
or if it mySet.has("a")
.
const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5] [...new Set(numbers)] // [2, 3, 4, 5, 6, 7, 32]
Avoid that pitfall: If you add objects like in the following example, remember that you create a different object each time:
const mySet = new Set(); mySet.add({a: "1"}); mySet.add({a: "1"}); // not the same as first object for (val of mySet) { console.log(val); } mySet.delete({a: "1"}); // makes no sense, because it is a new object mySet.size; // 2
Set values are unique and case sensitive:
et text = 'India' let mySet = new Set(text) // Set ['I', 'n', 'd', 'i', 'a'] mySet.size // 5 //case sensitive & duplicate omission new Set("Firefox") // Set(7) [ "F", "i", "r", "e", "f", "o", "x" ] new Set("firefox") // Set(6) [ "f", "i", "r", "e", "o", "x" ]
Convert Array to Set (and vice versa)
You can construct Sets with an Iterable:
const mySet = new Set([1, 2, 3, 4, 5]); mySet.has(1); // true mySet.has(5); // true mySet.has(6); // false
From Set to Array
[...mySet]
Get entries, keys and values as Iterator
You can get entries(), keys() and values():
const set1 = new Set(["a", "b", "c"]); const it = set1.entries(); it.next(); // {done: false, value: ["a", "a"] } it.next(); // {done: false, value: ["b", "b"] } it.next(); // {done: false, value: ["c", "c"] } it.next(); // {done: true, value: undefined }
const it = set1.keys() it.next(); // {done: false, value: "a" }
const it = set1.values() it.next(); // {done: false, value: "a" }
Helpful Set operations
These I copied straight from MDN:
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 } // Examples let setA = new Set([1, 2, 3, 4]) let setB = new Set([2, 3]) let setC = new Set([3, 4, 5, 6]) isSuperset(setA, setB) // => true union(setA, setC) // => Set [1, 2, 3, 4, 5, 6] intersection(setA, setC) // => Set [3, 4] symmetricDifference(setA, setC) // => Set [1, 2, 5, 6] difference(setA, setC) // => Set [1, 2]