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…

Map dan Set adalah dua wadah data bawaan JavaScript. Map menyimpan pasangan key dan value, mirip object, tapi key-nya boleh tipe apa saja. Set menyimpan daftar nilai yang gak boleh dobel: nilai yang sama cuma disimpan sekali.

🧪 Tebakan cepat: kalau kamu set key yang sama dua kali ke sebuah Map, isinya jadi dua atau tetap satu? Tebak dulu, jawabannya ada di bagian "Map: pasangan key dan value".

Map: pasangan key dan value

const users = new Map([
  ["ivan", 30],
  ["rio", 25],
]);

users.set("ani", 22);
console.log(users.get("ivan")); // 30
console.log(users.has("rio"));  // true
console.log(users.size);        // 3

users.set("ivan", 31);
console.log(users.get("ivan")); // 31
console.log(users.size);        // 3

Jawaban tebakan: tetap satu. Key di Map unik, jadi set("ivan", 31) menimpa 30 dan size tetap 3.

Bedanya dengan object biasa: key object selalu diubah jadi teks, sedangkan key Map boleh tipe data apa saja (angka, teks, bahkan object), dan urutannya tetap sesuai urutan masuk.

Set: daftar tanpa yang dobel

const buah = new Set(["apel", "mangga", "apel", "jeruk", "mangga"]);

console.log(buah.size);         // 3
buah.add("apel");               // sudah ada, gak nambah
console.log(buah.has("jeruk")); // true

Jadi beda Set dengan array: array boleh berisi nilai yang sama berkali-kali, Set enggak.

Buang nilai dobel dari array

const angka = [1, 1, 2, 3, 3];
const unik = [...new Set(angka)];

console.log(unik); // [1, 2, 3]

new Set(angka) membuang yang dobel, lalu [...] membuka isi Set itu ke array baru. Titik tiga ini namanya spread, dibahas lengkap di pelajaran Spread & Rest. Array.from(new Set(angka)) hasilnya sama, dan array aslinya gak berubah.

Hitung kemunculan dengan Map

const warna = ["merah", "biru", "merah"];
const hitungan = new Map();

for (const w of warna) {
  hitungan.set(w, (hitungan.get(w) || 0) + 1);
}

console.log(Object.fromEntries(hitungan)); // { merah: 2, biru: 1 }

⚠️ Jebakan yang sering ketemu

TL;DR: Map menyimpan pasangan key dan value: .set(), .get(), .has(), .delete(), dan .size. Key-nya unik dan boleh tipe apa saja. Set menyimpan nilai tanpa dobel, jadi [...new Set(array)] adalah cara paling singkat membuang duplikat. Buat menghitung, pakai map.set(kata, (map.get(kata) || 0) + 1), lalu Object.fromEntries(map) kalau butuh object biasa.

Yang akan kamu pelajari