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-03

Set 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

  1. Qiymat turlari:

  2. Set: Har qanday turdagi qiymatlarni (primitiv va obyektlar) saqlashi mumkin.

  3. WeakSet: Faqat obyekt havolalarini saqlashi mumkin.

  4. Qiymat havolalari:

  5. Set: O'z qiymatlariga kuchli havola qiladi.

  6. WeakSet: O'z qiymatlariga kuchsiz havola qiladi, bu ularga axlat yig'uvchi tomonidan o'chirilishiga imkon beradi.

  7. Takrorlanish imkoniyati:

  8. Set: Takrorlanuvchi va aylanish uchun metodlarni taqdim etadi.

  9. WeakSet: Takrorlanmaydi va uning qiymatlariga kirish uchun metodlar taqdim etmaydi.

  10. Size xususiyati:

  11. Set: size xususiyatiga ega.

  12. WeakSet: size xususiyatiga ega emas.

  13. Qo'llanilish holatlari:

  14. Set: Noyob qiymatlarni umumiy maqsadli saqlash.

  15. 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

  1. S: WeakSet-da primitiv qiymatlardan foydalana olamanmi? J: Yo'q, WeakSet faqat obyektlarni qiymat sifatida qabul qiladi.
  2. S: WeakSet hajmini qanday tekshirish mumkin? J: WeakSet o'zining kuchsiz havola tabiati tufayli hajmini tekshirish uchun xususiyat yoki metod taqdim etmaydi.
  3. 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.
  4. 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.
  5. 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

  1. MDN Web Docs:

  2. Set

  3. WeakSet

  4. JavaScript.info:

  5. Map va Set

  6. WeakMap va WeakSet

  7. Kitoblar:

  8. Kyle Simpson tomonidan "You Don't Know JS" seriyasi

  9. Marijn Haverbeke tomonidan "Eloquent JavaScript"

  10. Onlayn kurslar:

  11. Udemy-da JavaScript: The Advanced Concepts

  12. Frontend Masters-da Deep JavaScript Foundations, v3

  13. GitHub repozitoriyalari:

  14. You-Dont-Need-Lodash-Underscore - Sof JavaScript-da Set va WeakSet foydalanish misollari

  15. Maqolalar:

  16. Jason Orendorff tomonidan ES6 In Depth: Collections

  17. DigitalOcean tomonidan Understanding Set and WeakSet in JavaScript