Setler artık ES2015'te (ES6, yani ECMAScript 6) mevcuttur. ES6, Haziran 2015'ten beri JavaScript için geçerli standarttır.
ECMAScript 6, rasgele değerler için çalışan, hızlı ve NaN'yi doğru şekilde işleyen veri yapısı Setine sahiptir. - Axel Rauschmayer , ES6'yı Keşfetmek
Axel Rauschmayer'in ES6'yı Keşfetmek kitabından ilk iki örnek :
Tek öğelerin yönetilmesi:
> let set = new Set();
> set.add('red')
> set.has('red')
true
> set.delete('red')
true
> set.has('red')
false
Bir Setin boyutunu belirleme ve onu temizleme:
> let set = new Set();
> set.add('red')
> set.add('green')
> set.size
2
> set.clear();
> set.size
0
Ben kontrol ederim ES6 keşfetmek JavaScript'te Kümeleri hakkında daha fazla bilgi edinmek istiyorsanız. Kitabı çevrimiçi olarak okumak ücretsizdir, ancak yazar Dr. Axel Rauschmayer'i desteklemek isterseniz kitabı yaklaşık 30 dolara satın alabilirsiniz.
Setleri ve ES6'yı kullanmak istiyorsanız şimdi Babel , ES6'dan ES5'e aktarıcıyı ve çoklu dolgularını kullanabilirsiniz .
Düzenleme: 6 Haziran 2017 itibarıyla başlıca tarayıcıların çoğu, en son sürümlerinde tam Set desteğine sahiptir (IE 11 hariç). Bu, eski tarayıcıları desteklemeyi umursamıyorsanız babel'e ihtiyacınız olmayabileceği anlamına gelir. Mevcut tarayıcınız da dahil olmak üzere farklı tarayıcılarda uyumluluğu görmek istiyorsanız, Kangax'ın ES6 uyumluluk tablosuna bakın .
DÜZENLE:
Sadece başlatma hakkında açıklama. Kümeler, yapıcılarında herhangi bir eşzamanlı yinelemeli olabilir. Bu, sadece dizileri değil aynı zamanda dizeleri ve yineleyicileri de alabilecekleri anlamına gelir. Örneğin, bir kümenin aşağıdaki dizi ve dize ilklendirmesini ele alalım:
const set1 = new Set(['a','a','b','b','c','c']);
console.log(...set1);
console.log(set1.size);
const set2 = new Set("aabbcc");
console.log(...set2);
console.log(set2.size);
Dizinin ve dizenin her iki çıkışı da aynıdır. Bunun yayılma sözdizimi olduğuna dikkat ...set1
edin . Yinelenebilir öğenin her bir öğesi tek tek kümeye eklendiği için, hem dizi hem de dize aynı öğelere sahip olduğundan ve öğeler aynı sırada olduğundan set aynı şekilde oluşturulur. Kümeler hakkında dikkat edilmesi gereken bir diğer nokta, üzerlerinde yineleme yaparken, yineleme sırası, öğelerin kümeye eklenme sırasını izler. Bir küme üzerinde yineleme örneği:
const set1 = new Set(['a','a','b','b','c','c']);
for(const element of set1) {
console.log(element);
}
Bir kümeyi başlatmak için herhangi bir yinelenebilir kullanabildiğiniz için, bir üreteç işlevinden bir yineleyici bile kullanabilirsiniz . İşte aynı çıktıyı üreten bu tür yineleyici başlatmalarının iki örneği:
function* getLetters1 () {
yield 'a';
yield 'a';
yield 'b';
yield 'b';
yield 'c';
yield 'c';
}
function* getLetters2 (letters, repeatTimes) {
for(const letter of letters) {
for(let i = 0; i < repeatTimes; ++i) {
yield letter;
}
}
}
console.log("------ getLetters1 ------");
console.log(...getLetters1());
const set3 = new Set(getLetters1());
console.log(...set3);
console.log(set3.size);
console.log("------ getLetters2 ------");
console.log(...getLetters2('abc', 2));
const set4 = new Set(getLetters2('abc', 2));
console.log(...set4);
console.log(set4.size);
Bu örneklerin oluşturucu işlevleri, tekrar edilmeyecek şekilde yazılabilir, ancak jeneratör işlevi daha karmaşıksa ve aşağıdakiler performansı çok olumsuz etkilemediği sürece Tekrar etmeyin.
Dr. Rauschmayer'in kitabının bölümünü okumadan setler hakkında daha fazla bilgi edinmek isterseniz Set'teki MDN belgelerine göz atabilirsiniz . MDN da kullanmak gibi bir dizi yinelemek daha fazla örnek vardır forEach
kullanarak .keys
, .values
ve .entries
yöntemler. MDN'de ayrıca set birleşimi, set kesişimi, set farkı, simetrik set farkı ve set süperset kontrolü gibi örnekler vardır. Umarım bu işlemlerin çoğu, onları destekleyen kendi işlevlerinizi oluşturmanıza gerek kalmadan JavaScript'te kullanılabilir hale gelir. Aslında, teklif 4. aşamaya ulaşırsa ileride bir zamanda JavaScript'te Ayarlamak için aşağıdaki yöntemleri eklemesi gereken yeni Set yöntemleri için bu TC39 önerisi vardır :
- Set.prototype.intersection (yinelenebilir) - yöntem, set kesişim işlemiyle yeni Set örneği oluşturur.
- Set.prototype.union (yinelenebilir) - yöntem, set birleşim işlemiyle yeni Set örneği oluşturur.
- Set.prototype.difference (yinelenebilir) - yöntem, yinelenebilir durumda bulunan öğeler olmadan yeni Set oluşturur.
- Set.prototype.symmetricDifference (yinelenebilir) - yalnızca bu veya yinelenebilir durumda bulunan öğeler kümesini döndürür.
- Set.prototype.isSubsetOf (yinelenebilir)
- Set.prototype.isDisjointFrom (yinelenebilir)
- Set.prototype.isSupersetOf (yinelenebilir)
'Tom' in set
görünmesi doğru olan bir diziyi beklersiniz ? Bu konuda yanlış varsayımları var çok benziyor şey , ve dışarı bulmaya çalışıyorum ne hakkında .