JavaScript Dilinde JS Sets Kullanımı
JavaScript'te Setler, benzersiz değerlerden oluşan bir koleksiyonu depolamak için kullanılan özel bir nesne türüdür.
Bu veri yapısı, tekrar eden öğelerin otomatik olarak elenmesini sağlayarak veri yönetimi ve manipülasyonunda önemli avantajlar sunar.
Bu makale, JavaScript Setlerinin temel kullanımını, sözdizimini ve pratik uygulamalarını detaylı bir şekilde açıklayacaktır.
Sözdizimi
Bir Set oluşturmak için new Set() kurucusu kullanılır.
Değerler, Set'in kurucusuna bir iterable (örneğin bir dizi) olarak geçirilebilir veya daha sonra add() metodu ile eklenebilir.
// Boş bir Set oluşturma
const mySet = new Set();
// Başlangıç değerleri ile Set oluşturma
const initialSet = new Set([1, 2, 3, 2, 4]); // initialSet: {1, 2, 3, 4}
// Metotlar
mySet.add(value);      // Bir değer ekler
mySet.delete(value);   // Bir değeri siler
mySet.has(value);      // Bir değerin varlığını kontrol eder
mySet.clear();         // Set'teki tüm öğeleri siler
mySet.size;            // Set'teki öğe sayısını döndürürDetaylı Açıklama
new Set([iterable]): Yeni bir Set nesnesi oluşturur. İsteğe bağlı olarak, iterable bir nesne (örneğin bir dizi) alabilir. Bu iterable içindeki tüm öğeler Set'e eklenir. Tekrar eden değerler otomatik olarak göz ardı edilir.Set.prototype.add(value): Set'e yeni bir değer ekler. Eğer değer zaten Set'te mevcutsa, Set değişmez. Zincirleme çağrılara izin vermek için Set nesnesini döndürür.Set.prototype.delete(value): Set'ten belirli bir değeri siler. Eğer değer Set'te mevcutsatrue, aksi takdirdefalsedöndürür.Set.prototype.has(value): Belirli bir değerin Set'te olup olmadığını kontrol eder. Varsatrue, yoksafalsedöndürür.Set.prototype.clear(): Set'teki tüm öğeleri siler ve Set'i boşaltır.Set.prototype.size: Set'teki benzersiz öğelerin sayısını döndüren bir erişimci özelliğidir.Set.prototype.forEach(callbackFn[, thisArg]): Set'teki her öğe için bir callback fonksiyonu yürütür. DizilerdekiforEachmetoduna benzer.Set.prototype.values(),Set.prototype.keys(),Set.prototype.entries(): Set'teki değerleri, anahtarları (Set'lerde anahtarlar ve değerler aynıdır) veya anahtar/değer çiftlerini ([value, value]formatında) içeren yeni bir Iterator nesnesi döndürür.
Pratik Kullanım Örnekleri
Aşağıdaki örnekler, JavaScript Setlerinin çeşitli kullanım senaryolarını göstermektedir.
1. Benzersiz Öğeleri Toplama
Bir dizideki yinelenen öğeleri kaldırmak ve yalnızca benzersiz değerleri elde etmek için Setleri kullanmak oldukça etkilidir.
const numbers = [1, 2, 3, 4, 2, 1, 5, 6, 3];
const uniqueNumbers = new Set(numbers);
console.log(uniqueNumbers); // Set(6) {1, 2, 3, 4, 5, 6}
// Set'i tekrar bir diziye dönüştürme
const uniqueNumbersArray = [...uniqueNumbers];
console.log(uniqueNumbersArray); // [1, 2, 3, 4, 5, 6]2. Öğelerin Varlığını Kontrol Etme
Bir öğenin bir koleksiyonda olup olmadığını hızlıca kontrol etmek için has() metodunu kullanabilirsiniz.
const fruits = new Set(['elma', 'armut', 'muz']);
console.log(fruits.has('elma'));   // true
console.log(fruits.has('çilek'));  // false
fruits.add('çilek');
console.log(fruits.has('çilek'));  // true3. Set Üzerinde İterasyon
Set öğeleri üzerinde döngü yapmak için forEach() metodunu veya for...of döngüsünü kullanabilirsiniz.
const colors = new Set(['kırmızı', 'mavi', 'yeşil']);
// forEach ile iterasyon
colors.forEach(color => {
    console.log(color);
});
// Çıktı:
// kırmızı
// mavi
// yeşil
// for...of ile iterasyon
for (const color of colors) {
    console.log(color);
}
// Çıktı:
// kırmızı
// mavi
// yeşilÖnemli Notlar
Değer Karşılaştırması: Setler, değerleri karşılaştırırken aynı algoritmayı kullanır. Bu,
NaNdeğerlerinin Set içinde benzersiz olarak ele alındığı anlamına gelir (NaN === NaNfalseolmasına rağmen, Set içinde sadece bir adetNaNbulunabilir). Obje referansları için, farklı referanslara sahip aynı içeriğe sahip objeler farklı kabul edilir.Sırasız Yapı: Setler, öğeleri eklenme sırasına göre depolasa da, Setin birincil amacı benzersiz öğeleri tutmaktır, belirli bir sırayı garanti etmek değildir. Bazı durumlarda iterasyon sırası ekleme sırasına denk gelebilir, ancak buna güvenilmemelidir.
Performans: Bir öğenin Set'te varlığını kontrol etmek (
has()metodu) genellikle O(1) zaman karmaşıklığına sahiptir, bu da büyük veri kümeleri için dizilerdeki aramalara göre daha verimli olabilir.Zayıf Referanslar: Eğer objeler için zayıf referanslara ihtiyacınız varsa (yani objeye başka referans kalmadığında otomatik olarak belleğin serbest bırakılmasını istiyorsanız),
WeakSetkullanmanız gerekebilir. AncakWeakSetsadece objeleri depolayabilir ve iterable değildir.Anahtar-Değer Çiftleri İçin Setler: Eğer benzersiz anahtar-değer çiftleri depolamanız gerekiyorsa,
Mapnesnesi daha uygun bir seçenek olabilir.
        
                
            
            
Yorum yap
Yorumlar