JavaScript-da Set va WeakSet
JavaScriptda Set va WeakSet ma'lumotlar tuzilmalarini o'rganing, ularning xususiyatlari, foydalanish holatlari va samaradorlik ko'rsatmalarini.
So'nggi yangilanish: 2024-01-03Set va WeakSet-ga kirish
Set va WeakSet - bu ECMAScript 2015 (ES6) da taqdim etilgan ikkita kuchli ma'lumotlar tuzilmasi. Ular noyob qiymatlarni saqlash uchun samarali usullarni taqdim etadi va turli dasturlash vaziyatlariga mos keladigan noyob xususiyatlarni taklif qiladi.
JavaScript-da Set
Set - bu har qanday turdagi noyob qiymatlarni, xoh primitiv qiymatlar bo'lsin, xoh obyekt havolalari bo'lsin, saqlaydigan to'plam.
Set yaratish
Siz Set konstruktori yordamida Set yaratishingiz mumkin:
const mySet = new Set();
Shuningdek, siz Set-ni takrorlanuvchi bilan ishga tushirishingiz mumkin:
const mySet = new Set([1, 2, 3, 4, 5]);
Set metodlari
Set bir nechta foydali metodlarni taqdim etadi:
add(value)
: Set-ga yangi element qo'shadi.has(value)
: Set-da qiymat mavjudligini tekshiradi.delete(value)
: Set-dan ko'rsatilgan elementni o'chiradi.clear()
: Set-dan barcha elementlarni o'chiradi.
Misol:
const mySet = new Set();
mySet.add(1);
mySet.add('salom');
mySet.add({name: 'John'});
console.log(mySet.has(1)); // Natija: true
console.log(mySet.has('dunyo')); // Natija: false
mySet.delete(1);
console.log(mySet.has(1)); // Natija: false
mySet.clear();
console.log(mySet.size); // Natija: 0
Set xususiyatlari
size
: Set-dagi elementlar sonini qaytaradi.
Set bo'ylab aylanish
Set-lar takrorlanuvchi va aylanish uchun bir nechta metodlarni taqdim etadi:
values()
: Qiymatlar takrorlanuvchisini qaytaradi.keys()
: Set obyektlari uchun values() bilan bir xil.entries()
: [qiymat, qiymat] juftliklari takrorlanuvchisini qaytaradi.forEach()
: Set-dagi har bir qiymat uchun berilgan funksiyani bajaradi.
Misol:
const mySet = new Set([1, 2, 3]);
for (const value of mySet) {
console.log(value);
}
mySet.forEach(value => {
console.log(value);
});
Set-ning qo'llanilish holatlari
- Massivdan takroriy qiymatlarni olib tashlash
- Noyob elementlar to'plamini saqlash
- Katta ma'lumotlar to'plami uchun samarali qidirish
- Matematik to'plam operatsiyalarini (birlashma, kesishma, farq) amalga oshirish
JavaScript-da WeakSet
WeakSet - bu faqat obyektlardan iborat to'plam bo'lib, unda obyektlarga havolalar kuchsiz saqlanadi. Bu shuni anglatadiki, agar WeakSet-da saqlangan obyektga boshqa havolalar bo'lmasa, u axlat yig'uvchi tomonidan o'chirilishi mumkin.
WeakSet yaratish
Siz WeakSet konstruktori yordamida WeakSet yaratishingiz mumkin:
const myWeakSet = new WeakSet();
WeakSet metodlari
WeakSet Set metodlarining kichik to'plamini taqdim etadi:
add(value)
: WeakSet-ga yangi obyekt qo'shadi.has(value)
: WeakSet-da obyekt mavjudligini tekshiradi.delete(value)
: WeakSet-dan ko'rsatilgan obyektni o'chiradi.
Misol:
const myWeakSet = new WeakSet();
const obj1 = {};
const obj2 = {};
myWeakSet.add(obj1);
myWeakSet.add(obj2);
console.log(myWeakSet.has(obj1)); // Natija: true
console.log(myWeakSet.has({})); // Natija: false
myWeakSet.delete(obj2);
console.log(myWeakSet.has(obj2)); // Natija: false
WeakSet xususiyatlari
WeakSet-larda size
xususiyati yoki ularning tarkibini aylanib chiqish uchun hech qanday metod yo'q.
WeakSet-ning qo'llanilish holatlari
- Obyektlarni o'zgartirmasdan belgilash
- DOM elementlari to'plamini saqlash
- Axlat yig'ishga to'sqinlik qilmaydigan obyektga asoslangan "to'plam"larni amalga oshirish
- Obyekt grafiklarida aylanma havolalarni aniqlash
Set va WeakSet o'rtasidagi farqlar
-
Qiymat turlari:
-
Set: Har qanday turdagi qiymatlarni (primitiv va obyektlar) saqlashi mumkin.
-
WeakSet: Faqat obyekt havolalarini saqlashi mumkin.
-
Qiymat havolalari:
-
Set: O'z qiymatlariga kuchli havola qiladi.
-
WeakSet: O'z qiymatlariga kuchsiz havola qiladi, bu ularga axlat yig'uvchi tomonidan o'chirilishiga imkon beradi.
-
Takrorlanish imkoniyati:
-
Set: Takrorlanuvchi va aylanish uchun metodlarni taqdim etadi.
-
WeakSet: Takrorlanmaydi va uning qiymatlariga kirish uchun metodlar taqdim etmaydi.
-
Size xususiyati:
-
Set:
size
xususiyatiga ega. -
WeakSet:
size
xususiyatiga ega emas. -
Qo'llanilish holatlari:
-
Set: Noyob qiymatlarni umumiy maqsadli saqlash.
-
WeakSet: Obyekt havolalari va xotira boshqaruvi bilan bog'liq maxsus qo'llanilish holatlari.
Ishlash samaradorligi bo'yicha mulohazalar
- Set-lar odatda massivlarga nisbatan elementning mavjudligini tekshirish uchun yaxshiroq ishlaydi.
- WeakSet-lar ma'lumotlarni obyektlar bilan bog'lash kerak bo'lgan, lekin axlat yig'ishga to'sqinlik qilmaslik kerak bo'lgan holatlarda xotira sizishlarining oldini olishga yordam beradi.
- Kichik to'plamlar uchun Set va Array o'rtasidagi ishlash farqi sezilarli bo'lmasligi mumkin.
Eng yaxshi amaliyotlar
- Noyob qiymatlar to'plamini saqlash kerak bo'lganda Set-dan foydalaning.
- Axlat yig'ishga to'sqinlik qilmasdan obyekt havolalarini saqlash kerak bo'lganda WeakSet-dan foydalaning.
- Elementlarning mavjudligini tez-tez tekshirish kerak bo'lganda Array o'rniga Set-ni afzal ko'ring.
- Obyektlarni belgilash yoki axlat yig'ishga to'sqinlik qilmaydigan obyektga asoslangan to'plamlarni amalga oshirish uchun WeakSet-dan foydalaning.
Tez-tez so'raladigan savollar
- S: WeakSet-da primitiv qiymatlardan foydalana olamanmi? J: Yo'q, WeakSet faqat obyektlarni qiymat sifatida qabul qiladi.
- S: WeakSet hajmini qanday tekshirish mumkin? J: WeakSet o'zining kuchsiz havola tabiati tufayli hajmini tekshirish uchun xususiyat yoki metod taqdim etmaydi.
- S: Set va WeakSet oqim xavfsizmi? J: JavaScript bir oqimli, shuning uchun oqim xavfsizligi muammo emas. Biroq, agar siz Web Worker-lardan foydalansangiz, har bir worker o'zining global doirasi va xotirasiga ega.
- S: Set va WeakSet-dan eski brauzerlardan foydalana olamanmi? J: Set va WeakSet barcha zamonaviy brauzerlarda qo'llab-quvvatlanadi. Eski brauzerlar uchun siz polyfill-dan foydalanishingiz yoki kodingizni transpilatsiya qilishingiz kerak bo'lishi mumkin.
- S: Set-ni massivga qanday o'tkazish mumkin? J: Siz yoyish operatori yoki Array.from()-dan foydalanishingiz mumkin:
const mySet = new Set([1, 2, 3]);
const array = [...mySet];
// yoki
const array = Array.from(mySet);
Qo'shimcha manbalar
-
MDN Web Docs:
-
JavaScript.info:
-
Kitoblar:
-
Kyle Simpson tomonidan "You Don't Know JS" seriyasi
-
Marijn Haverbeke tomonidan "Eloquent JavaScript"
-
Onlayn kurslar:
-
Udemy-da JavaScript: The Advanced Concepts
-
Frontend Masters-da Deep JavaScript Foundations, v3
-
GitHub repozitoriyalari:
-
You-Dont-Need-Lodash-Underscore - Sof JavaScript-da Set va WeakSet foydalanish misollari
-
Maqolalar:
-
Jason Orendorff tomonidan ES6 In Depth: Collections
-
DigitalOcean tomonidan Understanding Set and WeakSet in JavaScript