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

ÖzellikArray (Dizi)Set (Küme)Map (Harita)
Ne tutar?Sıralı veri listesiSadece benzersiz değerlerAnahtar + 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ımSıralı liste, UI verisiBenzersiz değerler, hızlı kontrolAnahtar-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ı

İşlemArraySetMap
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ı veriArray
Tekrar etmeyen bir listeSet
Anahtar + değer çiftleriMap
Hızlı şekilde değer içeriyor mu kontrolüSet veya Map
Tekrar eden verileri temizlemekSet

🔧 Ö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.
Arshia Shahidi | JavaScript Set Nedir? Ne Zaman ve Neden Kullanılır?