Set adalah koleksi yang hanya menyimpan nilai unik — tidak ada duplikat.
Operasi dan kompleksitas:
| Operasi | Kompleksitas |
|---|---|
add(value) |
O(1) |
has(value) |
O(1) |
delete(value) |
O(1) |
const set = new Set();
set.add(1);
set.add(2);
set.add(3);
set.add(2); // Diabaikan — sudah ada!
set.size; // 3
set.has(2); // true
set.delete(1);
// Hilangkan duplikat dari array
const arr = [1, 2, 2, 3, 3, 3, 4];
const unique = [...new Set(arr)]; // [1, 2, 3, 4]
Operasi Set Matematika:
const a = new Set([1, 2, 3, 4]);
const b = new Set([3, 4, 5, 6]);
// Union (gabungan)
const union = new Set([...a, ...b]); // {1, 2, 3, 4, 5, 6}
// Intersection (irisan)
const intersection = new Set([...a].filter(x => b.has(x))); // {3, 4}
// Difference (selisih)
const difference = new Set([...a].filter(x => !b.has(x))); // {1, 2}
Kegunaan nyata:
- Hapus duplikat — dari array, list, atau data
- Membership check — apakah item sudah ada?
- Tag system — kumpulan tag unik per item
- Visited nodes — tracking node yang sudah dikunjungi di graph
🎭 Analogi sehari-hari: Set = daftar undangan reuni. Yang penting: siapa diundang, BUKAN urutan atau berapa kali. Ada nama yang ditambahkan 2x? Tetap satu. Mau cek "Budi diundang gak?" Langsung lihat (O(1)), gak baca dari awal sampai akhir.
💡 Set vs Array untuk membership check: arr.includes(x) itu O(n) — loop dari awal sampai ketemu. set.has(x) itu O(1). Loop 1jt items, tiap items cek keberadaan — Array O(n²) = 1 triliun ops. Set O(n) = 1jt ops. 1 juta kali lebih cepat.
⚠️ Jebakan umum:
- Object di Set dibandingkan by reference —
set.has({id:1})bakal false walau ada{id:1}di set, karena objek baru. Untuk objek, simpan ID-nya saja - Set tidak menjaga urutan dengan jaminan kuat untuk semua operasi, walaupun di JS modern insertion order dipertahankan — jangan andalkan urutan sebagai fitur
- Konversi Set ke Array seenaknya pakai
[...set]— perhatikan size, set besar bisa berat dijadiin array
🎯 Kapan Set, kapan Array, kapan Map?
- Cek "ada gak" + tidak peduli urutan/duplikat → Set
- Urutan penting + boleh duplikat → Array
- Punya nilai yang diasosiasikan dengan key → Map
🧪 Tebakan cepat: Hilangkan duplikat dari array [1,2,2,3,3,3]. Cara tercepat? [...new Set(arr)]. Satu baris, O(n).
TL;DR: Set = koleksi unik, has/add/delete O(1). Pakai untuk dedup, membership check, dan tracking visited nodes di graph.