Masukkan Password
93 Struktur Data ES6
Materi ini membahas Set di JavaScript, salah satu data structure yang diperkenalkan pada ES6 (ES2015).
Kalau disederhanakan, konsep paling pentingnya adalah:
Set digunakan untuk menyimpan kumpulan nilai yang unik (tidak boleh ada duplikat), dan sangat cocok untuk mengecek apakah suatu nilai ada atau tidak.
Saya akan jelaskan dari dasar sampai alasan kenapa Set tidak punya index seperti array.
1. Sebelum ES6, JavaScript punya Object dan Array
Sebelum ES6, secara umum kita banyak menggunakan:
Array
const fruits = ["apple", "banana", "orange"];
Array cocok ketika kita ingin menyimpan sekumpulan data yang berurutan dan mengambil data berdasarkan posisi/index.
Contoh:
console.log(fruits[0]);
Hasil:
apple
Object
Object digunakan untuk menyimpan data dalam bentuk key-value:
const user = {
name: "Budi",
age: 25
};
Kita mengambil data berdasarkan property:
console.log(user.name);
Hasil:
Budi
2. ES6 memperkenalkan Set dan Map
Mulai ES6, JavaScript juga memiliki:
SetMap
Keduanya punya tujuan yang berbeda.
Untuk materi kali ini kita fokus pada Set.
3. Apa itu Set?
Definisi sederhananya:
Set adalah kumpulan nilai yang hanya boleh muncul satu kali.
Contoh:
const numbers = new Set([1, 2, 3, 4]);
Set tersebut berisi:
1
2
3
4
Sekarang kita coba memasukkan angka yang sama:
const numbers = new Set([1, 2, 3, 2, 4, 3]);
Array yang kita berikan memiliki:
1
2
3
2
4
3
Ada 2 sebanyak dua kali dan 3 sebanyak dua kali.
Tetapi Set hanya menyimpan:
1
2
3
4
Jadi:
console.log(numbers);
akan menghasilkan Set dengan 4 nilai unik.
4. Cara membuat Set
Kita menggunakan constructor:
new Set()
Contoh:
const mySet = new Set();
Sekarang kita memiliki Set kosong.
Kalau kita cek:
console.log(mySet);
hasilnya kira-kira:
Set(0) {}
Angka 0 berarti Set tersebut memiliki 0 element.
5. Membuat Set dari Array
Kita juga bisa langsung memberikan array ke Set.
const numbers = new Set([1, 2, 3, 4]);
Di sini:
[1, 2, 3, 4]
adalah array.
Array tersebut diberikan kepada:
new Set(...)
JavaScript kemudian membuat Set berdasarkan isi array tersebut.
Hasilnya:
Set(4) {1, 2, 3, 4}
6. Bagaimana kalau array memiliki duplikat?
Misalnya:
const numbers = new Set([
1,
2,
3,
2,
4,
3
]);
Array awal:
1, 2, 3, 2, 4, 3
Set akan membuang duplikat:
1, 2, 3, 4
Jadi:
console.log(numbers.size);
hasilnya:
4
Ingat:
Array:
[1, 2, 3, 2, 4, 3]
boleh memiliki duplikat.
Set:
Set {1, 2, 3, 4}
tidak menyimpan duplikat.
7. Set bisa menyimpan berbagai tipe data
Set tidak hanya bisa menyimpan angka.
Kita bisa menyimpan:
- number
- string
- boolean
- null
- undefined
- object
- array
- bahkan Set lain
Contoh:
const mixedSet = new Set([
100,
true,
"hello",
null,
undefined
]);
Set tersebut memiliki berbagai tipe data:
100 → number
true → boolean
"hello" → string
null → null
undefined → undefined
Tidak masalah.
8. Set juga bisa menyimpan Object
Contohnya:
const mixedSet = new Set([
100,
true,
"hello",
null,
undefined,
{
name: "John"
}
]);
Object:
{
name: "John"
}
juga bisa menjadi element dari Set.
Jadi jangan berpikir bahwa Set hanya bisa menyimpan angka.
9. String juga bisa digunakan untuk membuat Set
Ini bagian yang menarik.
String merupakan iterable.
Misalnya:
const strSet = new Set("hello");
String:
h e l l o
akan diproses karakter per karakter.
Karena Set hanya menyimpan nilai unik:
h
e
l
o
Huruf l hanya disimpan sekali.
Jadi hasilnya kurang lebih:
Set(4) {"h", "e", "l", "o"}
10. Apa itu Iterable?
Tidak perlu terlalu dipikirkan rumit dulu.
Secara sederhana:
Iterable adalah sesuatu yang bisa diakses/dilewati satu per satu menggunakan mekanisme iterasi JavaScript.
Contohnya:
[1, 2, 3]
adalah iterable.
String:
"hello"
juga iterable.
Karena itu kita bisa membuat:
new Set([1, 2, 3])
dan:
new Set("hello")
11. Cara lain membuat Set: add()
Tadi kita membuat Set langsung dari array:
const cities = new Set([
"London",
"Delhi",
"New York"
]);
Tetapi kita juga bisa membuat Set kosong:
const cities = new Set();
Kemudian menambahkan data satu per satu menggunakan:
add()
Contoh:
cities.add("London");
cities.add("Delhi");
cities.add("New York");
Sekarang:
London
Delhi
New York
tersimpan di Set.
12. Kalau menambahkan data yang sama?
Misalnya:
cities.add("London");
cities.add("Delhi");
cities.add("New York");
cities.add("Delhi");
Kita mencoba memasukkan:
Delhi
dua kali.
Tetapi Set tetap hanya memiliki:
London
Delhi
New York
Tidak menjadi:
London
Delhi
New York
Delhi
Karena:
Set tidak menyimpan duplicate value.
13. Method add()
Syntax:
set.add(value);
Contoh:
const cities = new Set();
cities.add("London");
cities.add("Tokyo");
cities.add("Jakarta");
Set sekarang berisi:
London
Tokyo
Jakarta
Hal menarik lainnya:
cities.add("London");
akan mengembalikan Set itu sendiri.
Karena itu kita bahkan bisa melakukan chaining:
cities
.add("London")
.add("Tokyo")
.add("Jakarta");
Ini menghasilkan Set yang sama dengan:
cities.add("London");
cities.add("Tokyo");
cities.add("Jakarta");
14. Method delete()
Kalau ingin menghapus satu nilai dari Set, gunakan:
delete()
Contoh:
const cities = new Set([
"London",
"Delhi",
"New York",
"Tokyo"
]);
Kita ingin menghapus Tokyo:
cities.delete("Tokyo");
Sekarang Set menjadi:
London
Delhi
New York
15. Apa yang dikembalikan delete()?
delete() mengembalikan boolean:
true
atau:
false
Kalau value ditemukan dan berhasil dihapus:
cities.delete("Tokyo");
hasilnya:
true
Kalau value tidak ditemukan:
cities.delete("Paris");
hasilnya:
false
Jadi:
true→ value ditemukan dan dihapusfalse→ value tidak ditemukan
16. Method has()
Ini adalah salah satu method paling penting dari Set.
Digunakan untuk mengecek:
“Apakah nilai ini ada di dalam Set?”
Contoh:
const cities = new Set([
"London",
"Delhi",
"New York"
]);
Kemudian:
cities.has("London");
hasil:
true
Karena London ada.
Sedangkan:
cities.has("Tokyo");
hasil:
false
Karena Tokyo tidak ada.
17. Kenapa has() penting?
Karena salah satu tujuan utama Set adalah membership checking.
Misalnya kita mempunyai daftar username yang sudah digunakan:
const usernames = new Set([
"budi",
"andi",
"joko"
]);
Ketika seseorang ingin menggunakan username:
budi
kita bisa mengecek:
usernames.has("budi");
Hasil:
true
Artinya username tersebut sudah ada.
Kalau:
usernames.has("siti");
hasil:
false
Artinya belum ada.
18. Method clear()
Kalau:
delete()
menghapus satu element, maka:
clear()
menghapus semua element.
Contoh:
const cities = new Set([
"London",
"Delhi",
"New York",
"Tokyo"
]);
Kemudian:
cities.clear();
Sekarang:
Set(0) {}
Semua data sudah dihapus.
Perhatikan
clear() tidak membutuhkan argument.
Salah:
cities.clear("London");
Yang benar:
cities.clear();
19. Property size
Set memiliki property:
size
untuk mengetahui berapa banyak element yang sedang disimpan.
Contoh:
const cities = new Set([
"London",
"Delhi",
"New York"
]);
Kemudian:
console.log(cities.size);
hasil:
3
Kalau kita menambahkan:
cities.add("Tokyo");
maka:
console.log(cities.size);
hasil:
4
Kalau kemudian:
cities.delete("Tokyo");
maka:
cities.size
kembali:
3
20. Bedakan size dengan length
Ini penting.
Pada Array:
const numbers = [10, 20, 30];
console.log(numbers.length);
Kita menggunakan:
length
Sedangkan pada Set:
const numbers = new Set([10, 20, 30]);
console.log(numbers.size);
kita menggunakan:
size
Jadi:
Array → length
Set → size
21. Bagian paling penting: Set tidak punya index
Nah, ini yang sering membingungkan pemula.
Array memiliki index.
Contoh:
const cities = [
"London",
"Delhi",
"Tokyo"
];
Posisinya:
index 0 → London
index 1 → Delhi
index 2 → Tokyo
Kita bisa:
console.log(cities[1]);
Hasil:
Delhi
22. Set tidak bekerja seperti itu
Misalnya:
const cities = new Set([
"London",
"Delhi",
"Tokyo"
]);
Kita tidak bisa melakukan:
console.log(cities[0]);
Hasilnya:
undefined
Kenapa?
Karena Set tidak memiliki konsep index seperti Array.
23. Kenapa Set tidak punya index?
Karena tujuan utama Set bukan:
“Simpan data supaya saya bisa mengambil data berdasarkan posisi.”
Tujuan utama Set adalah:
“Pastikan data unik dan cek apakah sebuah data ada.”
Misalnya kita punya:
const usernames = new Set([
"budi",
"andi",
"joko"
]);
Yang penting bukan:
Siapa username index ke-2?
Tetapi:
Apakah "budi" sudah ada?
Maka kita menggunakan:
usernames.has("budi");
24. Array vs Set
Ini perbandingan yang sangat penting.
| Array | Set |
|---|---|
| Bisa memiliki duplikat | Tidak bisa memiliki duplikat |
| Memiliki index | Tidak memiliki index |
Bisa mengambil array[0] | Tidak bisa set[0] |
| Fokus pada urutan/posisi | Fokus pada uniqueness & membership |
length | size |
| Cocok untuk akses berdasarkan posisi | Cocok untuk pengecekan keberadaan |
Contoh Array:
const numbers = [10, 20, 30, 20];
Valid.
Ada 20 dua kali.
Set:
const numbers = new Set([10, 20, 30, 20]);
hasilnya:
10
20
30
25. “Tapi Set tetap memiliki urutan, kan?”
Ya.
Ini bagian yang sedikit membingungkan.
Set mempertahankan insertion order.
Misalnya:
const cities = new Set();
cities.add("London");
cities.add("Tokyo");
cities.add("Jakarta");
Ketika diiterasi, urutannya adalah:
London
Tokyo
Jakarta
sesuai urutan saat ditambahkan.
Tetapi ini bukan berarti Set memiliki index.
Artinya:
Set mengingat urutan saat data dimasukkan, tetapi kita tidak mengambil data berdasarkan nomor posisi.
Jadi jangan berpikir:
London = index 0
Tokyo = index 1
Jakarta = index 2
lalu menggunakan:
cities[1]
Itu tetap tidak bekerja.
26. Set menyimpan value, bukan key-value pair
Array:
[
"London",
"Tokyo",
"Jakarta"
]
Set:
new Set([
"London",
"Tokyo",
"Jakarta"
])
Keduanya menyimpan nilai.
Tetapi Object:
{
city: "London",
country: "UK"
}
menyimpan hubungan:
key → value
Set tidak bekerja seperti itu.
Set hanya peduli pada nilai.
27. Mengapa tidak menggunakan Array saja?
Pertanyaan yang sangat bagus.
Misalnya kita ingin menyimpan daftar ID unik.
Dengan Array:
const ids = [10, 20, 30];
Kita harus berhati-hati agar tidak memasukkan ID yang sama.
Misalnya:
ids.push(20);
sekarang:
[10, 20, 30, 20]
Ada duplicate.
Dengan Set:
const ids = new Set([10, 20, 30]);
ids.add(20);
Set tetap:
10
20
30
Tidak ada duplikat.
28. Use case: menghilangkan duplikat dari Array
Ini salah satu penggunaan Set yang sangat populer.
Misalnya:
const numbers = [
1,
2,
3,
2,
4,
1,
5
];
Kita ingin menghapus duplicate.
Kita bisa:
const uniqueNumbers = new Set(numbers);
Hasil:
Set {1, 2, 3, 4, 5}
Kalau kita membutuhkan Array lagi, kita bisa mengubahnya kembali:
const uniqueNumbers = [...new Set(numbers)];
Hasil:
[1, 2, 3, 4, 5]
Ini pola yang sangat sering kamu lihat di JavaScript modern.
29. Use case: mengecek apakah data sudah ada
Misalnya kita mempunyai daftar email:
const emails = new Set([
"a@gmail.com",
"b@gmail.com",
"c@gmail.com"
]);
Seseorang memasukkan:
b@gmail.com
Kita bisa:
if (emails.has("b@gmail.com")) {
console.log("Email sudah terdaftar");
}
Ini sangat sesuai dengan tujuan Set:
“Apakah nilai ini sudah ada?”
30. Method-method penting yang perlu diingat
Dari materi ini, ada beberapa method/property penting.
add()
Menambahkan value:
cities.add("Tokyo");
delete()
Menghapus value tertentu:
cities.delete("Tokyo");
Mengembalikan:
true / false
has()
Mengecek apakah value ada:
cities.has("Tokyo");
Mengembalikan:
true / false
clear()
Menghapus semua value:
cities.clear();
size
Mengetahui jumlah value:
cities.size;
31. Gambaran sederhana
Bayangkan Array seperti rak bernomor:
Index
0 1 2
┌──────┬──────┬──────┐
│London│Delhi │Tokyo │
└──────┴──────┴──────┘
Kamu bisa berkata:
“Berikan saya data di posisi 1.”
cities[1]
Hasil:
Delhi
Sedangkan Set lebih seperti keranjang yang tidak boleh ada barang kembar:
┌──────────────────────────┐
│ London │
│ Delhi │
│ Tokyo │
└──────────────────────────┘
Kalau kamu memasukkan Delhi lagi:
Delhi
Set berkata:
“Sudah ada. Tidak perlu disimpan lagi.”
Dan ketika kamu bertanya:
cities.has("Delhi");
Set menjawab:
true
32. Jadi jangan menggunakan Set kalau…
Kamu membutuhkan:
“Ambil element berdasarkan posisi.”
Misalnya kamu sering melakukan:
items[0]
items[1]
items[2]
Maka Array lebih cocok.
Contoh:
const students = [
"Budi",
"Andi",
"Siti"
];
console.log(students[1]);
Hasil:
Andi
33. Gunakan Set kalau…
Kamu lebih membutuhkan:
1. Data unik
const uniqueIds = new Set();
2. Pengecekan apakah data sudah ada
uniqueIds.has(id);
3. Menambahkan data
uniqueIds.add(id);
4. Menghapus data
uniqueIds.delete(id);
Jadi fokusnya adalah:
SET
│
┌──────┼──────┐
↓ ↓ ↓
Unique Has Delete
check
34. Kesimpulan paling penting
Kalau kamu hanya mengingat satu kalimat dari lecture ini, ingat:
Set adalah data structure untuk menyimpan nilai-nilai unik dan melakukan pengecekan keberadaan nilai dengan mudah; Set bukan digunakan untuk mengambil data berdasarkan index.
Dan hafalkan tabel ini:
| Operasi | Syntax |
|---|---|
| Membuat Set | new Set() |
| Menambahkan | set.add(value) |
| Menghapus | set.delete(value) |
| Mengecek keberadaan | set.has(value) |
| Menghapus semuanya | set.clear() |
| Menghitung jumlah | set.size |
Serta perbedaan paling mendasar:
// Array
const a = [10, 20, 20, 30];
console.log(a[1]); // 20
console.log(a.length); // 4
vs:
// Set
const b = new Set([10, 20, 20, 30]);
console.log(b[1]); // undefined
console.log(b.size); // 3
Array → fokus pada posisi/index. Set → fokus pada uniqueness dan membership (apakah suatu nilai ada atau tidak).
Itulah alasan Set diperkenalkan: bukan sekadar “Array versi baru”, tetapi untuk kebutuhan yang berbeda.