Object.keys, values, entries
Massivlarda map, filter, reduce kabi qulay metodlar bor edi. Oddiy obyektlar uchun ham xuddi shunga o'xshash universal metodlar mavjud: Object.keys, Object.values va Object.entries. Ushbu darsda ular bilan chuqur tanishamiz.
Nima uchun kerak?
Ba'zan obyektning barcha kalitlari yoki qiymatlari ustida aylanish (iteratsiya) kerak bo'ladi. Buni for..in orqali qilsak bo'ladi, ammo ko'pincha bizga massiv qulayroq โ chunki massivda map, filter, sort kabi kuchli metodlar bor.
Aynan shu yerda uch metod yordamga keladi. Ular obyektni massivga aylantirib beradi:
Object.keys(obj)โ kalitlar massivini qaytaradi;Object.values(obj)โ qiymatlar massivini qaytaradi;Object.entries(obj)โ[kalit, qiymat]juftliklari massivini qaytaradi.
Sintaksis va birinchi misol
E'tibor bering: bu metodlar obj.keys() emas, balki Object.keys(obj) ko'rinishida chaqiriladi โ ya'ni obyekt argument sifatida uzatiladi. Bu ataylab shunday qilingan, sababini keyinroq tushuntiramiz.
Ko'rib turganingizdek, uchala metod ham natijani haqiqiy massiv sifatida qaytaradi. Demak, ular ustida massivning barcha metodlarini bemalol ishlatishimiz mumkin.
for..of bilan aylanish
Bu metodlar massiv qaytargani uchun, ular ustida for..of sikli bilan qulay aylanamiz. Obyektning o'zi ustida for..of ishlamaydi (chunki oddiy obyekt iterable emas), lekin metodlar qaytargan massiv ustida ishlaydi.
Object.entries bilan aylanganda, har bir element [kalit, qiymat] massivi bo'ladi. Uni to'g'ridan-to'g'ri destrukturizatsiya (keyingi darsda) bilan ochib olsa juda qulay:
Amaliy misol: qiymatlar yig'indisi
Aytaylik, barcha narxlar yig'indisini hisoblamoqchimiz. Object.values massiv qaytargani uchun, biz massivning reduce metodidan foydalanamiz:
Object.values (yoki entries) bilan massivga o'ting, so'ng massiv metodlaridan foydalaning.Obyektni o'zgartirish: entries + fromEntries
Massivlarda map, filter bor, lekin obyektlarda yo'q. Shuning uchun obyektni o'zgartirishning eng qulay yo'li shunday:
Object.entries(obj)orqali[kalit, qiymat]juftliklari massivini olamiz;- Massivning
mapyokifiltermetodini qo'llaymiz; - Natijani
Object.fromEntries(massiv)orqali yana obyektga aylantiramiz.
Object.fromEntries โ bu Object.entriesning teskarisi: u [kalit, qiymat] juftliklari massivini olib, obyekt yasaydi.
Filtrlash misoli โ faqat 10000 so'mdan qimmat mahsulotlarni qoldiramiz:
Map bilan farqi
Map, Set kabi ma'lumot tuzilmalarida ham keys(), values(), entries() metodlari bor. Ammo ular orasida muhim farqlar mavjud:
- Chaqirish shakli: Map'da bu
map.keys()(metod sifatida), oddiy obyektda esaObject.keys(obj)(statik funksiya sifatida); - Qaytaradigan qiymat: Map'ning metodlari iterable obyekt qaytaradi (haqiqiy massiv emas), obyektning metodlari esa haqiqiy massiv qaytaradi;
- Kalit turlari: Map'da kalit istalgan tur bo'la oladi (obyekt, funksiya ham), oddiy obyektda esa kalitlar faqat satr yoki simvol.
Nima uchun Object.keys(obj) shaklida, ya'ni obj.keys() emas? Sabab โ moslashuvchanlik. JavaScript'da obyektlar turli tuzilmalarning asosi bo'lib xizmat qiladi. Agar bizning obyektimizda o'zining keys nomli metodi bo'lsa, uni buzib qo'ymaslik uchun tashqi Object.keys(obj) shakli ishlatiladi.
Array.from(map.keys()) yoki [...map.keys()] orqali massivga aylantiring.Xulosa
Object.keys(obj)โ kalitlar massivini qaytaradi;Object.values(obj)โ qiymatlar massivini qaytaradi;Object.entries(obj)โ[kalit, qiymat]juftliklari massivini qaytaradi;- Uchala metod ham haqiqiy massiv qaytaradi va faqat o'ziga tegishli xossalarni oladi;
Object.fromEntries(massiv)โ juftliklar massivini yana obyektga aylantiradi;- Obyektni o'zgartirish uchun:
entriesโmap/filterโfromEntries.