In the world of JavaScript, there are several ways to handle and organize data, with arrays and objects being the most popular. However, ES6 (the sixth edition of the ECMAScript standard) introduced two useful data structures: Set
and Map
. These structures offer unique advantages that can be indispensable in specific scenarios.
📌 Table of Contents
- What is a Set?
- What is a Map?
- Set vs. Array: When to Use Which?
- Map vs. Object: When to Use Which?
- Wrapping Up
What is a Set?
A Set
in JavaScript is a collection of values where each value must be unique. This means no duplicate values are allowed. The values can be of any type, and the order of values in the set does not matter.
Creating a Set
Creating a set is simple. Use the new
keyword followed by Set()
.
let mySet = new Set()
// console.log(mySet)
// Output: Set(0) {}
Adding Values to a Set
We can add values to a set using the add
method:
mySet.add(1)
mySet.add(5)
mySet.add('JavaScript')
// console.log(mySet)
// Output: Set(3) { 1, 5, 'JavaScript' }
Checking the Size of a Set
To check how many elements are in a Set, use the size
property:
console.log(mySet.size) // Output: 3
Checking if a Value Exists in a Set
To check if a value is in a Set, use the has
method:
console.log(mySet.has(1)) // Output: true
console.log(mySet.has(2)) // Output: false
Removing Values
Remove a specific element with the delete
method:
mySet.delete(5)
Or clear the entire Set with the clear
method:
mySet.clear()
Iterating Over a Set
We can iterate over the values of a Set using for...of
loop:
for (let item of mySet) {
console.log(item)
}
Or using forEach
method:
mySet.forEach((value) => {
console.log(value)
})
What is a Map?
A Map
is a collection of key-value pairs, similar to an object, but with a few key differences. In a Map
, keys can be of any data type, not just strings or Symbols. Also, maps maintain the order of insertion, which isn't guaranteed in plain objects.
Creating a Map
To create a Map, we can use the new
keyword, optionally passing an array of key-value pairs:
let myMap = new Map()
// console.log(myMap)
// Output: Map(0) {}
Setting Key-Value Pairs
Use the set
method to add key-value pairs to the Map:
myMap.set('name', 'JavaScript')
myMap.set(1, 'ES6')
myMap.set(true, 'boolean')
// console.log(myMap)
// Output: Map(3) { 'name' => 'JavaScript', 1 => 'ES6', true => 'boolean' }
Getting Values
Retrieve a value by key using the get
method:
console.log(myMap.get('name')) // Output: 'JavaScript'
Checking the Size of a Map
Similar to Set, Map have a size
property:
console.log(myMap.size) // Output: 3
Checking if a key Exists in a Map
Check for the existence of a key using has
:
console.log(myMap.has('name')) // Output: true
Removing Key-Value Pairs
Remove a specific key-value pair with the delete
method:
myMap.delete('name')
Or clear the entire Map with the clear
method:
myMap.clear()
Iterating Over a Map
Iterate through a Map's keys, values, or entries with the keys
, values
, and entries
methods, respectively:
for (let key of myMap.keys()) {
console.log(key)
}
for (let value of myMap.values()) {
console.log(value)
}
for (let [key, value] of myMap.entries()) {
console.log(key, value)
}
We can also use the forEach
method:
myMap.forEach((value, key) => {
console.log(key, value);
})
Set vs. Array: When to Use Which?
Understanding when to use a Set
instead of an Array can be crucial for both the performance and clarity of our code. While both can store collections of values, they serve different purposes.
Uniqueness
If our primary concern is to prevent duplicate values, a Set
automatically ensures that all elements are unique. With an Array, we would have to manually check for duplicates before adding a new element.
Performance
When it comes to performance, especially for large collections of data, Set
is more performant for checking the existence of an element within it. This is because Set
is implemented with efficient data structures under the hood that allow for faster lookup.
Map vs. Object: When to Use Which?
While Map
and Object
in JavaScript can appear to serve similar functions as collections of key-value pairs, there are significant differences that could affect which one we should use.
Key Flexibility
Map
accepts keys of any data type, whereas an Object
only accepts Strings and Symbols as keys.
Iteration Order
Map
maintains the order of elements as they were inserted, while the order of keys in a plain object is not guaranteed.
Size Determination
A Map
directly provides the size
property, making it easy to determine the number of key-value pairs. With an Object
, we would typically use Object.keys(obj).length
, which is less direct.
Performance
For frequent additions and removals of key-value pairs, Map
is more performant than using an Object
.
Wrapping Up
Both Set
and Map
are robust constructs in JavaScript that can greatly enhance the way we work with collections of data. With the knowledge of how to utilize these structures, we'll be able to write cleaner, more efficient code.
Top comments (4)
Had no idea about Set and Map! Thanks.
Thanks for your feedback. 🎉
Great job, thank you for this wonderful post.
Thanks for your feedback. 🎉