Updated Jan 27 2019
Psssst! The 2023 WEB DEVELOPMENT BOOTCAMP is starting on FEBRUARY 01, 2023! SIGNUPS ARE NOW OPEN to this 10-weeks cohort course. Learn the fundamentals, HTML, CSS, JS, Tailwind, React, Next.js and much more! ✨
A Set data structure allows to add data to a container.
ECMAScript 6 (also called ES2015) introduced the Set data structure to the JavaScript world, along with Map
A Set is a collection of objects or primitive types (strings, numbers or booleans), and you can think of it as a Map where values are used as map keys, with the map value always being a boolean true.
A Set is initialized by calling:
const s = new Set()
You can add items to the Set by using the add
method:
s.add('one')
s.add('two')
A set only stores unique elements, so calling s.add('one')
multiple times won’t add new items.
You can’t add multiple elements to a set at the same time. You need to call add()
multiple times.
Once an element is in the set, we can check if the set contains it:
s.has('one') //true
s.has('three') //false
Use the delete()
method:
s.delete('one')
Use the size
property:
s.size
Use the clear()
method:
s.clear()
Use the keys()
or values()
methods - they are equivalent:
for (const k of s.keys()) {
console.log(k)
}
for (const k of s.values()) {
console.log(k)
}
The entries()
method returns an iterator, which you can use like this:
const i = s.entries()
console.log(i.next())
calling i.next()
will return each element as a { value, done = false }
object until the iterator ends, at which point done
is true
.
You can also use the forEach() method on the set:
s.forEach(v => console.log(v))
or you can just use the set in a for..of loop:
for (const k of s) {
console.log(k)
}
You can initialize a Set with a set of values:
const s = new Set([1, 2, 3, 4])
const a = [...s.keys()]
// or
const a = [...s.values()]
A WeakSet is a special kind of Set.
In a Set, items are never garbage collected. A WeakSet instead lets all its items be freely garbage collected. Every key of a WeakSet is an object. When the reference to this object is lost, the value can be garbage collected.
Here are the main differences:
A WeakSet is generally used by framework-level code, and only exposes these methods: