Map & Set — JavaScript

Pernah pengen nyimpen pasangan key-value di JavaScript? Kebanyakan langsung ngira "pakai Object aja kan?" — bener, tapi Object punya batasan: key SELALU di-conv

Pernah pengen nyimpen pasangan key-value di JavaScript? Kebanyakan langsung ngira "pakai Object aja kan?" — bener, tapi Object punya batasan: key SELALU di-convert ke string, urutan masuk gak terjamin, ribet di-iterate. Solusinya: Map — struktur data yang dirancang khusus buat key-value pairs. Key bisa apa aja (number, object, function), urutan terjamin sesuai urutan insert, gampang di-iterate. Sodaranya: Set — kumpulan nilai unik (auto-reject duplikat).

🤔 Trick paling populer. [...new Set(arr)] — gabungin Set (auto-unique) dengan spread operator, dapet array tanpa duplikat dalam satu baris. Resep dedupe yang dipake di production code di mana-mana.

Map — seperti Object, tapi key bisa bertipe apapun:

const peta = new Map();
peta.set("nama", "Budi");
peta.set(1, "satu");
peta.get("nama"); // "Budi"
peta.size;        // 2
peta.has("nama"); // true

Set — kumpulan nilai unik (tidak ada duplikat):

const unik = new Set([1, 2, 2, 3, 3]);
console.log(unik.size); // 3 (duplikat dihapus otomatis)
unik.add(4);
unik.has(2);    // true
unik.delete(1);

Kapan pakai Map vs Object?

Kapan pakai Set vs Array?

🎭 Analogi sehari-hari

Object juga bisa jadi "kamus" tapi kunci di-convert ke string. Map tidak — 1 (number) dan "1" (string) di Map = key beda.

⚠️ Jebakan yang sering ditemui

🎯 Map vs plain Object — pilih yang mana?

  • Key non-string (number, object, function) → Map (Object auto convert ke string)
  • Sering tambah/hapus entriesMap (perf lebih bagus untuk frequent mutations)
  • Butuh urutan masuk yang terjaminMap (Object urutan inconsistent untuk numeric keys)
  • Butuh .sizeMap (Object harus Object.keys(o).length)
  • Static config/data structure (key string, gak diubah) → plain Object (sintaks lebih ringkas, JSON-friendly)
  • Class instance / domain model → plain Object atau class (Map untuk data dynamic murni)

Aturan praktis: kebanyakan kasus = Object cukup. Pakai Map kalau key non-string, mutation berat, atau butuh ordering. JSON-serializable defaultnya = Object.

TL;DR: Map = key-value, key bisa apa aja (number, object, function), urutan terjamin, mutation perf bagus. Pakai .set()/.get()/.size. Set = kumpulan nilai unik (auto-reject duplikat). Trick dedupe paling populer: [...new Set(arr)]. Object key auto-convert ke string, Map tidak — 1"1". Iterate Map = [key, value] entries. Set comparison pakai === (object beda referensi gak dianggap dup). Map gak JSON-serializable langsung.

Yang akan kamu pelajari