DEV Community

Mahmudul Fahim
Mahmudul Fahim

Posted on

πŸ—ΊοΈ JavaScript Map, Set, WeakMap & WeakSet β€” The Complete Guide

If you’re serious about modern JavaScript, you must understand
Map, Set, WeakMap, and WeakSet.

They solve real problems that Object and Array couldn’t β€” especially around performance, memory, and data safety.

🟦 Map()
βœ… What is Map?

Map is a built-in JavaScript data structure that stores key–value pairs, just like objects, but way more powerful.

const user = new Map([
  ['name', 'md fahim'],
  ['age', 22],
  [99, true],
]);
Enter fullscreen mode Exit fullscreen mode

πŸ€” Why does Map exist?

Objects had limitations:

❌ Keys were mostly strings
❌ Order wasn’t guaranteed (older JS)
❌ No easy way to know the size

Map fixes all of that.

πŸ”‘ Core Map Methods

// Add or update
user.set('country', 'Bangladesh');
user.set('age', 23);

// Get value
user.get('name'); // 'md fahim'
user.get(99);     // true

// Check existence
user.has('email'); // false

// Delete key
user.delete(99);

// Clear all
user.clear();

// Size
user.size;
Enter fullscreen mode Exit fullscreen mode

πŸ” Looping Through a Map
βœ… for...of (BEST)

for (const [key, value] of user) {
  console.log(key, value);
}
Enter fullscreen mode Exit fullscreen mode

keys()

for (const key of user.keys()) {
  console.log(key);
}
Enter fullscreen mode Exit fullscreen mode

values()

for (const value of user.values()) {
  console.log(value);
}
Enter fullscreen mode Exit fullscreen mode

entries() (default)

for (const [key, value] of user.entries()) {
  console.log(key, value);
}
Enter fullscreen mode Exit fullscreen mode

forEach()

user.forEach((value, key) => {
  console.log(key, value);
});
Enter fullscreen mode Exit fullscreen mode

⚠️ Order is (value, key) β€” opposite of Object

🧠 Important Rule: Keys Are Compared by Reference

const obj = { id: 1 };

const map = new Map();
map.set(obj, 'data');

map.get({ id: 1 }); // ❌ undefined
map.get(obj);       // βœ… 'data'
Enter fullscreen mode Exit fullscreen mode

❌ Common Map Mistakes
❌ Dot notation

user.name // ❌
Enter fullscreen mode Exit fullscreen mode

βœ… Correct

user.get('name');
Enter fullscreen mode Exit fullscreen mode

❌ This won’t work

user.keys().forEach(); // ❌
Enter fullscreen mode Exit fullscreen mode

βœ… Do this

for (const key of user.keys()) {}
Enter fullscreen mode Exit fullscreen mode

πŸ”„ Convert Between Map & Object
Map β†’ Object

const obj = Object.fromEntries(user);
Enter fullscreen mode Exit fullscreen mode

Object β†’ Map

const map = new Map(Object.entries(obj));
Enter fullscreen mode Exit fullscreen mode

Map β†’ Array

console.log([...map]);
console.log(Array.from(map));
Enter fullscreen mode Exit fullscreen mode

🟩 Set()
βœ… What is Set?

A Set stores unique values only.

const numbers = new Set([1, 2, 3, 3, 4]);
console.log(numbers); // {1,2,3,4}
Enter fullscreen mode Exit fullscreen mode

πŸ”‘ Core Set Methods

set.add(1);
set.has(1);     // true
set.delete(1);
set.clear();
set.size;
Enter fullscreen mode Exit fullscreen mode

πŸ” Looping a Set
for...of (BEST)

for (const value of set) {
  console.log(value);
}
Enter fullscreen mode Exit fullscreen mode

forEach()

set.forEach(value => {
  console.log(value);
});
Enter fullscreen mode Exit fullscreen mode

values() / keys()

set.values();
set.keys(); // same as values
Enter fullscreen mode Exit fullscreen mode

🧠 How Set Checks Uniqueness
Primitive values

new Set([1, 1, '1']); // {1, '1'}
Enter fullscreen mode Exit fullscreen mode

Objects (REFERENCE-based)

const a = { x: 1 };
const b = { x: 1 };

const set = new Set([a, b]);
console.log(set.size); // 2
Enter fullscreen mode Exit fullscreen mode

❌ Common Set Mistakes

set[0]; // ❌ undefined
Enter fullscreen mode Exit fullscreen mode

βœ” Sets are not indexed

πŸ”₯ Real-Life Use Cases
Remove duplicates

[...new Set([1,2,2,3])];
Enter fullscreen mode Exit fullscreen mode

Fast permission check

const roles = new Set(['admin', 'editor']);
roles.has('admin');
Enter fullscreen mode Exit fullscreen mode

🟨 WeakMap()
🧠 Mental Model

β€œThis data belongs to the object.
If the object dies, the data should die too.”

Rules

βœ” Keys must be objects
βœ” Weakly referenced
βœ” Auto garbage collection
❌ No iteration

Example: Private Data

const privateData = new WeakMap();

class User {
  constructor(name, password) {
    privateData.set(this, { password });
    this.name = name;
  }

  checkPassword(pass) {
    return privateData.get(this).password === pass;
  }
}
Enter fullscreen mode Exit fullscreen mode

🧹 Garbage Collection Magic

let user = { id: 1 };
const wm = new WeakMap();

wm.set(user, 'secret');
user = null; // auto cleanup
Enter fullscreen mode Exit fullscreen mode

πŸŸͺ WeakSet()
🧠 Mental Model

β€œI just want to know if I’ve seen this object before.”

Rules

βœ” Objects only
βœ” No duplicates
βœ” Auto cleanup
❌ No iteration

Example: Tracking Objects

const visited = new WeakSet();

function process(obj) {
  if (visited.has(obj)) return;
  visited.add(obj);
  console.log('Processing...');
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)