Set

Struktur data Set, dari manipulasi dasar hingga operasi himpunan matematika.
Author : Celvine
Last Update : 25 January 2026

Kita sering kali perlu menyimpan sekumpulan data. Kamu mungkin terbiasa menggunakan Array, namun ada kalanya Array bukan solusi yang paling efisien, terutama ketika kita membutuhkan keunikan data (tidak boleh ada duplikat).

Di sinilah Set berperan. Set adalah struktur data yang memungkinkan kamu menyimpan nilai-nilai unik dari tipe apa pun, baik itu nilai primitif maupun referensi objek.

1. Inisialisasi & Konstruktor

Langkah pertama adalah membuat instance dari Set. Kita menggunakan keyword new.

new Set()

Ini membuat Set kosong.

new Set(iterable)

Kamu bisa langsung mengisi Set saat inisialisasi dengan memberikan sebuah iterable (seperti Array) sebagai argumen.

example.js
// 1. Membuat Set kosong
const emptySet = new Set();
console.log(emptySet); // Output: Set(0) {}

// 2. Membuat Set dari Array
// Perhatikan: Angka 1 yang duplikat otomatis dihilangkan
const numbers = new Set([1, 2, 3, 1, 4]);
console.log(numbers); // Output: Set(4) { 1, 2, 3, 4 }

Mengapa ini penting?

Konstruktor otomatis menyaring duplikat. Ini adalah cara tercepat untuk membersihkan data ganda dari sebuah list.

2. Properti

.size

Berbeda dengan Array yang menggunakan .length, Set menggunakan properti .size untuk mengetahui jumlah elemen di dalamnya.

example.js
const mySet = new Set(['Apple', 'Banana', 'Cherry']);

console.log(mySet.size); // Output: 3

3. Method Manipulasi Data

Setelah membuat Set, kamu perlu menambahkan, menghapus, atau memeriksa keberadaan data.

Method .add(value)

Menambahkan elemen baru ke akhir Set. Method ini mengembalikan objek Set itu sendiri, sehingga bisa di-chaining (disambung).

Method .delete(value)

Menghapus elemen tertentu. Mengembalikan true jika elemen ditemukan dan dihapus, atau false jika tidak ditemukan.

Method .has(value)

Memeriksa apakah nilai tertentu ada di dalam Set. Ini jauh lebih cepat performanya dibandingkan .includes() pada Array untuk data dalam jumlah besar.

Method .clear()

Menghapus seluruh isi Set.

example.js
const framework = new Set();

// Menambah data
framework.add('React');
framework.add('Vue').add('Svelte'); // Chaining

// Memeriksa data
if (framework.has('React')) {
  console.log('React sudah terdaftar!');
}

// Menghapus data
const isDeleted = framework.delete('Vue');
console.log(`Apakah Vue dihapus? ${isDeleted}`); // Output: true

// Membersihkan semua
framework.clear();
console.log(framework.size); // Output: 0

4. Method Iterasi (Perulangan)

Set adalah objek yang iterable, artinya kamu bisa melakukan perulangan di dalamnya.

.forEach(callback)

Sama seperti Array, menjalankan fungsi untuk setiap elemen.

.values(), .keys(), .entries()

  • .values(): Mengembalikan iterator untuk nilai.
  • .keys(): Di Set, ini sama persis dengan .values() (untuk kompatibilitas dengan Map).
  • .entries(): Mengembalikan iterator [value, value].

Penggunaan dalam loop for...of

Ini adalah cara paling modern untuk melakukan loop pada Set.

example.js
const colors = new Set(['Merah', 'Hijau', 'Biru']);

// Menggunakan for...of (Rekomendasi)
console.log('--- Loop for...of ---');
for (const color of colors) {
  console.log(color);
}

// Menggunakan forEach
console.log('--- Loop forEach ---');
colors.forEach((value) => {
  console.log(`Warna: ${value}`);
});

5. Konversi & Transformasi

Seringkali kita perlu mengubah Set kembali menjadi Array untuk menggunakan method Array seperti .map, .filter, atau .reduce.

Konversi Set ke Array

Ada dua cara umum: menggunakan Spread Operator atau Array.from().

Konversi Array ke Set (Hapus Duplikat)

Ini adalah use-case paling populer untuk Set.

example.js
const numbers = [10, 20, 10, 30, 20, 40];

// 1. Menghapus duplikat (Array -> Set)
const uniqueSet = new Set(numbers);

// 2. Mengembalikan ke Array (Set -> Array)
// Menggunakan Spread Operator
const uniqueArraySpread = [...uniqueSet];

// Menggunakan Array.from
const uniqueArrayFrom = Array.from(uniqueSet);

console.log(uniqueArraySpread); // Output: [10, 20, 30, 40]

6. Karakteristik Nilai

Memahami bagaimana Set menganggap dua nilai "sama" sangat penting untuk menghindari bug.

Konsep Value Uniqueness & Same-value-zero equality

Set menggunakan algoritma khusus untuk mengecek kesamaan. Secara umum mirip dengan operator ===, tetapi ada pengecualian.

Penanganan nilai NaN

Dalam Set, NaN dianggap sama dengan NaN. Jadi, kamu hanya bisa menyimpan satu NaN.

Penanganan Tipe Data Reference (Object/Array)

Hati-hati di sini! Dua objek yang isinya sama persis dianggap berbeda karena referensi memorinya berbeda.

example.js
const trickySet = new Set();

// Kasus NaN
trickySet.add(NaN);
trickySet.add(NaN);
console.log(trickySet.size); // Output: 1 (NaN dianggap sama)

// Kasus Object
const user1 = { id: 1 };
const user2 = { id: 1 }; // Isi sama, tapi referensi memori baru

trickySet.add(user1);
trickySet.add(user2);
trickySet.add({ id: 1 }); // Ini juga objek baru

console.log(trickySet.size); 
// Output: 4 (1 NaN + 3 Objek berbeda)
// Object di Javascript dibandingkan berdasarkan referensi, bukan isi.

7. Operasi Himpunan (Matematika)

Salah satu kekuatan utama Set adalah kemampuannya melakukan operasi himpunan matematika secara efisien. Mari kita implementasikan logikanya.

Kita akan menggunakan dua Set untuk contoh: A dan B.

example.js
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([3, 4, 5, 6]);

// 1. Union (Gabungan): Semua elemen dari A dan B (tanpa duplikat)
const union = new Set([...setA, ...setB]);
console.log('Union:', [...union]); 
// Output: [1, 2, 3, 4, 5, 6]


// 2. Intersection (Irisan): Elemen yang ADA di A DAN ADA di B
// Kita ubah setA jadi array untuk bisa di-filter
const intersection = new Set(
  [...setA].filter(x => setB.has(x))
);
console.log('Intersection:', [...intersection]); 
// Output: [3, 4]


// 3. Difference (Selisih): Elemen yang ADA di A TAPI TIDAK ADA di B
const difference = new Set(
  [...setA].filter(x => !setB.has(x))
);
console.log('Difference (A - B):', [...difference]); 
// Output: [1, 2]

On this page