Map va Set
Endi biz murakkabroq ma'lumot tuzilmalari bilan tanishamiz: Map (kalit-qiymat juftliklari to'plami, kalit istalgan tur bo'lishi mumkin) va Set (faqat unikal qiymatlar to'plami).
Map — nima uchun kerak?
Map — xuddi Object kabi kalit-qiymat juftliklarini saqlaydi. Ammo Object dan farqli o'laroq, Map da kalit istalgan turdagi qiymat — hatto obyekt yoki funksiya — bo'lishi mumkin.
Asosiy metodlar va xususiyatlar:
new Map()— yangi Map yaratadi;map.set(kalit, qiymat)— qiymat qo'shadi (map ning o'zini qaytaradi, zanjir qilish mumkin);map.get(kalit)— kalit bo'yicha qiymatni oladi (yo'q bo'lsaundefined);map.has(kalit)— kalit mavjudliginitrue/falsebilan qaytaradi;map.delete(kalit)— kalit bo'yicha o'chiradi;map.clear()— hamma narsani tozalaydi;map.size— elementlar soni (bu xususiyat, funksiya emas!).
map[kalit] shaklida foydalanmang! Bu Map ni oddiy obyektdek ishlatadi va uning barcha afzalliklarini yo'qotadi. Har doim map.set va map.get dan foydalaning.Obyektni kalit sifatida ishlatish
Map ning eng foydali xususiyatlaridan biri — obyektlarni kalit sifatida ishlatish. Bu oddiy obyektda mumkin emas (obyekt kaliti satrga aylanib qoladi).
Map kalitlarni SameValueZero algoritmi bo'yicha taqqoslaydi. U === ga o'xshaydi, ammo bitta farq bilan: NaN ning o'ziga tengligini tan oladi, ya'ni NaN ham kalit bo'la oladi.Zanjir va iteratsiya
map.set map ning o'zini qaytargani uchun chaqiruvlarni zanjir qilish mumkin:
Map bo'yicha aylanish uchun uch xil usul bor:
map.keys()— kalitlar bo'yicha iterable qaytaradi;map.values()— qiymatlar bo'yicha iterable;map.entries()—[kalit, qiymat]juftliklari bo'yicha iterable (for..ofuchun standart).
Map qo'shish tartibini saqlaydi! Oddiy obyektdan farqli o'laroq (unda son kalitlar avtomatik saralanadi), Map elementlar qanday tartibda qo'shilgan bo'lsa, o'sha tartibda aylanadi.Map da ham forEach mavjud, xuddi massivdagidek:
Object bilan bog'liqlik: Object.entries va Object.fromEntries
Map yaratishda uni ikki elementli massivlar massivi bilan to'ldirish mumkin. Aynan shu format Object.entries(obj) tomonidan qaytariladi. Shu tufayli oddiy obyektdan Map yasash oson:
Aksincha yo'nalish — Object.fromEntries — kalit/qiymat juftliklaridan oddiy obyekt yasaydi:
Set — unikal qiymatlar to'plami
Set — qiymatlarning maxsus turdagi to'plami bo'lib, unda har bir qiymat faqat bir marta uchraydi. Kalit yo'q — faqat qiymatlar.
new Set(iterable)— Set yaratadi (ixtiyoriy iterable bilan to'ldiradi);set.add(qiymat)— qiymat qo'shadi (set ni qaytaradi);set.delete(qiymat)— o'chiradi;set.has(qiymat)— mavjudligini tekshiradi;set.clear()— tozalaydi;set.size— elementlar soni.
Set ning eng ko'p uchraydigan qo'llanilishi — massivdan takrorlarni olib tashlash:
Set ham iterable — for..of yoki forEach bilan aylanish mumkin. U ham qo'shish tartibini saqlaydi:
keys(), values(), entries() mavjud. Set da kalit yo'qligi sababli keys() va values() bir xil natija beradi, entries() esa [qiymat, qiymat] juftliklarini qaytaradi.Map/Set ni Object/Array bilan qachon ishlatish kerak?
- Kalit istalgan tur (obyekt, son) bo'lsa yoki qo'shish tartibi muhim bo'lsa —
Map; - Tez-tez qo'shish/o'chirish va
sizeni bilish kerak bo'lsa —Mapqulayroq; - Faqat unikal qiymatlar to'plami kerak bo'lsa yoki mavjudlikni tez tekshirish kerak bo'lsa —
Set; - Oddiy, JSON ga oson aylanadigan tuzilma yetarli bo'lsa —
Object/Array.
Xulosa
Map— istalgan turdagi kalitli kalit-qiymat to'plami;set/get/has/delete/size;Mapqo'shish tartibini saqlaydi va obyekt kalitlarni qo'llab-quvvatlaydi;- Iteratsiya:
keys(),values(),entries(),forEach; Object.entriesobyektdan Map,Object.fromEntriesMap dan obyekt yasashga yordam beradi;Set— faqat unikal qiymatlar to'plami; takrorlarni olib tashlash uchun ideal;- Ikkalasi ham iterable —
for..ofbilan ishlaydi.