JavaScript’te yerleşik olarak gelen veri yapılarından biri de Set
. Bu yazıda Set
nedir, Array
(dizi) ve Map
(anahtar-değer yapısı) ile farkları nelerdir ve ne zaman kullanılmalı (ya da kullanılmamalı) bunlara bakacağız.
⚡ Hızlı Karşılaştırma Tablosu
Özellik | Array (Dizi) | Set (Küme) | Map (Harita) |
---|---|---|---|
Ne tutar? | Sıralı veri listesi | Sadece benzersiz değerler | Anahtar + Değer çiftleri |
Aynı değer olabilir mi? | ✅ Evet | ❌ Hayır | ✅ Değer evet, anahtar hayır |
İndeksle erişim? | ✅ Evet (arr[0] ) | ❌ Hayır | ❌ Hayır |
Anahtarla erişim? | ❌ Hayır | ❌ Hayır | ✅ Evet (map.get(key) ) |
Hızlı arama? | ❌ Hayır (includes ) | ✅ Evet (has ) | ✅ Evet (get , has ) |
En uygun kullanım | Sıralı liste, UI verisi | Benzersiz değerler, hızlı kontrol | Anahtar-değer eşlemeleri |
🧩 JavaScript’te Set
Nedir?
Set
, JavaScript’te benzersiz değerleri saklamak için kullanılır. İçine aynı değeri tekrar koyamazsınız, otomatik olarak filtreler.
const mySet = new Set();
mySet.add(1);
mySet.add(5);
mySet.add(5); // Aynı değer tekrar eklenmez
console.log(mySet); // Set { 1, 5 }
✅ Özellikler:
- Aynı değerleri iki kez tutmaz
- Eklediğiniz sırayı korur (tıpkı
Array
gibi)
✅ Ne Zaman Set
Kullanmalı?
- Elinizde benzersiz veriler tutmak istiyorsanız
.has()
ile hızlı kontrol yapmak istiyorsanız- Bir dizideki tekrarlı değerleri temizlemek istiyorsanız
const sayilar = [1, 2, 2, 3];
const benzersiz = [...new Set(sayilar)]; // [1, 2, 3]
❌ Ne Zaman Kullanmamalı?
- İndeksle (
arr[1]
) erişmek istiyorsanız .map()
,.filter()
gibi dizi fonksiyonlarını kullanmanız gerekiyorsa
⚡ Performans Karşılaştırması
İşlem | Array | Set | Map |
---|---|---|---|
Değer var mı kontrolü | ❌ Yavaş | ✅ Hızlı | ✅ Hızlı |
Veri ekleme/silme | ✅ Kolay | ✅ Kolay | ✅ Kolay |
İndeks / Anahtar ile erişim | ✅ Evet | ❌ Hayır | ✅ Evet |
🤓 Kullanım Örnekleri
İhtiyacınız... | Kullanılacak Yapı |
---|---|
Tekrar edebilen sıralı veri | Array |
Tekrar etmeyen bir liste | Set |
Anahtar + değer çiftleri | Map |
Hızlı şekilde değer içeriyor mu kontrolü | Set veya Map |
Tekrar eden verileri temizlemek | Set |
🔧 Örnek: Set ile Yetki Birleştirme
Bir veritabanı sorgusu yaptınız ve şöyle bir sonuç döndü diyelim:
const dbSonucu = [
{ name: "Arshia", permission: "read" },
{ name: "Arshia", permission: "write" },
{ name: "Arshia", permission: "read" }, // ← tekrar eden yetki
];
Amacınız: Tek kullanıcıya ait tekrar etmeyen yetkileri birleştirmek.
type KullaniciYetkisi = {
name: string;
permission: string;
};
const yetkileriBirleştir = (satirlar: KullaniciYetkisi[]) => {
if (satirlar.length === 0) throw new Error("Boş liste");
const sonuc = {
name: satirlar[0].name ?? "Bilinmiyor",
permissions: new Set<string>(), // boş bir Set oluştur
};
for (const satir of satirlar) {
sonuc.permissions.add(satir.permission); // tekrarlar otomatik filtrelenir
}
return {
...sonuc,
permissions: Array.from(sonuc.permissions), // Set → Array dönüşümü
};
};
console.log(yetkileriBirleştir(dbSonucu));
/**
* {
* name: 'Arshia',
* permissions: [ 'read', 'write' ]
* }
*/
✅ Neden Set?
- Aynı izin tekrar gelirse,
Set
sayesinde otomatik olarak atlanır. Array
ile bunu manuel kontrol etmeniz gerekir.- Roller, etiketler, yetkiler gibi benzersiz veri kümeleri için birebir.