Map and Set

...

Xaritaviy va to‘plam (Map va Set)

Hozirgacha biz quyidagi murakkab ma'lumot tuzilmalarini o‘rgandik:

  • Obyektlar kalit bo‘yicha ma'lumotlar yig‘indisini saqlash uchun ishlatiladi.
  • Massivlar tartibli yig‘indini saqlash uchun ishlatiladi.

Biroq, bu real hayotda yetarli emas. Shu sababli Map va Set kabi ma'lumot tuzilmalari ham mavjud.

Map

Map - bu kalitli ma'lumot elementlarini yig‘ishdir, xuddi Obyekt kabi. Ammo asosiy farq shundaki, Map har qanday turdagi kalitlarga ruxsat beradi.

Metodlar va xossalari:

  • new Map() – yangi xarita (Map) yaratadi.
  • map.set(key, value) – qiymatni kalit bo‘yicha saqlaydi.
  • map.get(key) – kalit bo‘yicha qiymatni qaytaradi, agar kalit xaritada mavjud bo‘lmasa, undefined qaytaradi.
  • map.has(key) – agar kalit mavjud bo‘lsa, true, aks holda false qaytaradi.
  • map.delete(key) – kalit bo‘yicha elementni olib tashlaydi.
  • map.clear() – xaritadan hamma narsani olib tashlaydi.
  • map.size – hozirgi elementlar sonini qaytaradi.

Misol uchun:

let map = new Map();
 
map.set('1', 'str1');   // matnli kalit
map.set(1, 'num1');     // raqamli kalit
map.set(true, 'bool1'); // mantiqiy (boolean) kalit
 
alert( map.get(1) );    // 'num1'
alert( map.get('1') );  // 'str1'
alert( map.size );      // 3

Map orqali obyektlarni kalit sifatida ishlatish

Map-da obyektlar kalit sifatida ishlatilishi mumkin. Masalan:

let john = { name: "John" };
let visitsCountMap = new Map();
 
visitsCountMap.set(john, 123);
alert( visitsCountMap.get(john) ); // 123

Obyektlar bilan ishlashda Map aniq turdagi kalitlarni ajratib oladi, bu esa oddiy obyektlardan farq qiladi.

Map kalitlarini solishtirish

Map kalitlarni solishtirishda SameValueZero algoritmidan foydalanadi. Bu algoritm deyarli === (qattiq tenglik) bilan bir xil, lekin farqi shundaki, NaN NaNga teng deb hisoblanadi. Shu sababli NaN ham kalit bo‘lishi mumkin.

Map’da iteratsiya qilish

Map ustida iteratsiya qilish uchun quyidagi usullar mavjud:

  • map.keys() – kalitlar uchun iterable.
  • map.values() – qiymatlar uchun iterable.
  • map.entries() – kalit-qiymat juftliklari uchun iterable.

Misol uchun:

let recipeMap = new Map([
  ['bodring', 500],
  ['pomidor', 350],
  ['piyoz',   50]
]);
 
for (let sabzavot of recipeMap.keys()) {
  alert(sabzavot); // bodring, pomidor, piyoz
}
 
for (let miqdor of recipeMap.values()) {
  alert(miqdor); // 500, 350, 50
}
 
for (let juftlik of recipeMap.entries()) {
  alert(juftlik); // ['bodring', 500] va boshqalar
}

Obyektdan Map yaratish

Agar sizda oddiy obyekt bo‘lsa va undan Map yaratmoqchi bo‘lsangiz, Object.entries(obj) usulidan foydalanishingiz mumkin:

let obj = {
  name: "John",
  yosh: 30
};
 
let map = new Map(Object.entries(obj));
alert( map.get('name') ); // John

Map’dan oddiy obyekt yaratish

Xuddi shunday tarzda Map’dan oddiy obyekt yaratish uchun Object.fromEntries(map) usulidan foydalanishingiz mumkin:

let map = new Map();
map.set('banan', 1);
map.set('apelsin', 2);
map.set('go‘sht', 4);
 
let obj = Object.fromEntries(map);
alert(obj.apelsin); // 2

Set

Set — bu o‘ziga xos yig‘indi turi bo‘lib, u faqat unikal qiymatlarni saqlaydi.

Set’ning asosiy metodlari:

  • new Set([iterable]) – yangi to‘plam yaratadi, agar iterable (masalan, massiv) berilsa, to‘plamga qiymatlar qo‘shiladi.
  • set.add(value) – qiymat qo‘shadi, agar qiymat mavjud bo‘lsa, hech narsa qilmaydi.
  • set.delete(value) – qiymatni o‘chiradi, agar qiymat mavjud bo‘lsa, true qaytaradi, aks holda false.
  • set.has(value) – qiymat mavjudligini tekshiradi.
  • set.clear() – to‘plamni tozalaydi.
  • set.size – elementlar sonini qaytaradi.

Misol uchun:

let set = new Set();
let john = { name: "John" };
let pete = { name: "Pete" };
let mary = { name: "Mary" };
 
set.add(john);
set.add(pete);
set.add(mary);
set.add(john);
 
alert( set.size ); // 3
 
for (let user of set) {
  alert(user.name); // John, Pete, Mary
}

Set’da iteratsiya qilish

Set ustida iteratsiya qilish uchun for..of yoki forEach usulidan foydalanishingiz mumkin:

let set = new Set(["apelsin", "olma", "banan"]);
 
for (let qiymat of set) alert(qiymat);
 
set.forEach((qiymat) => {
  alert(qiymat);
});

Xulosa

  • Map – kalitli qiymatlar yig‘indisi. Kalitlar har qanday turdagi bo‘lishi mumkin va qo‘shimcha qulay metodlarga ega.
  • Set – faqat unikal qiymatlar yig‘indisi.

Ushbu sahifada

GitHubda tahrirlash