Set
Definition
A Set is a collection of unique values. Each value can occur only once in a Set. Sets maintain insertion order and provide efficient membership testing.
> const set = new Set()
undefined
> set instanceof Set
true
Using sets
// Empty set
const set = new Set()
// From array
const set2 = new Set([1, 2, 3, 3, 2, 1])
// Set { 1, 2, 3 } (duplicates removed)
// From string
const set3 = new Set('hello')
// Set { 'h', 'e', 'l', 'o' } (duplicates removed)
Operations on sets
Set methods
Adding and Checking
const set = new Set()
// add() - adds a value
set.add(1)
set.add(2)
set.add(1) // Ignored (duplicate)
// has() - checks if value exists
set.has(1) // true
set.has(3) // false
Size
const set = new Set([1, 2, 3])
set.size // 3
Deleting
const set = new Set([1, 2, 3])
// delete() - removes a value
set.delete(2) // true (value existed)
set.delete(4) // false (value didn't exist)
// clear() - removes all values
set.clear()
set.size // 0
Iteration
for...of Loop
const set = new Set([1, 2, 3])
for (const value of set) {
console.log(value)
}
// 1
// 2
// 3
forEach()
const set = new Set([1, 2, 3])
set.forEach(value => {
console.log(value)
})
values(), keys(), entries()
const set = new Set([1, 2, 3])
Array.from(set.values()) // [1, 2, 3]
Array.from(set.keys()) // [1, 2, 3] (same as values)
Array.from(set.entries()) // [[1, 1], [2, 2], [3, 3]]
Set operations
Union
const set1 = new Set([1, 2, 3])
const set2 = new Set([3, 4, 5])
const union = new Set([...set1, ...set2])
// Set { 1, 2, 3, 4, 5 }
Intersection
const set1 = new Set([1, 2, 3])
const set2 = new Set([2, 3, 4])
const intersection = new Set(
[...set1].filter(x => set2.has(x))
)
// Set { 2, 3 }
Difference
const set1 = new Set([1, 2, 3])
const set2 = new Set([2, 3, 4])
const difference = new Set(
[...set1].filter(x => !set2.has(x))
)
// Set { 1 }
Use Cases
Removing Duplicates
const array = [1, 2, 2, 3, 3, 3]
const unique = [...new Set(array)]
// [1, 2, 3]
Membership Testing
const allowedUsers = new Set(['alice', 'bob', 'charlie'])
function isAllowed(username) {
return allowedUsers.has(username)
}
Tracking Visited Items
const visited = new Set()
function visit(item) {
if (visited.has(item)) {
return 'Already visited'
}
visited.add(item)
return 'First visit'
}
Set vs Array
| Feature | Set | Array |
|---|---|---|
| Uniqueness | Enforced automatically | Manual checking |
| Lookup | O(1) average | O(n) |
| Order | Insertion order | Index-based |
| Duplicates | Not allowed | Allowed |
Best Practices
-
Use Set for uniqueness: When you need to ensure values are unique.
-
Use Set for membership testing: Faster than
array.includes()for large collections. -
Convert to array when needed: Use spread operator
[...set]to convert back to array. -
Use Set for deduplication: Simple way to remove duplicates from arrays.
-
Consider WeakSet: For object-only collections that allow garbage collection.