Object.keys, values, entries
Endi individual ma'lumot tuzilmalaridan chetga chiqib, ular ustidan iteratsiya qilish usullari haqida gaplashamiz.
Oldingi bo'limlarda biz map.keys()
, map.values()
, map.entries()
metodlarini ko'rib chiqdik.
Bu metodlar umumiy hisoblanadi va ma'lumot tuzilmalariga nisbatan ishlatilishi kelishilgan. Agar biz o'zimiz uchun ma'lumot tuzilmasi yaratadigan bo'lsak, bu metodlarni ham qo'llashimiz kerak bo'ladi.
Ular quyidagi tuzilmalarda qo'llab-quvvatlanadi:
- Map
- Set
- Array
Oddiy obyektlar (Plain objects) ham shunga o'xshash metodlarni qo'llab-quvvatlaydi, ammo sintaksis biroz boshqacha.
Object.keys, values, entries
Oddiy obyektlar uchun quyidagi metodlar mavjud:
Object.keys(obj)
– kalitlar massivini qaytaradi.Object.values(obj)
– qiymatlar massivini qaytaradi.Object.entries(obj)
– [kalit, qiymat] juftliklaridan iborat massivni qaytaradi.
Map bilan taqqoslaganda ba'zi farqlar mavjud:
Map | Object | |
---|---|---|
Chaqarish usuli | map.keys() | Object.keys(obj) , ammo obj.keys() emas |
Qaytaradi | iterable | “haqiqiy” massiv (Array) |
Birinchi farq shundaki, biz Object.keys(obj)
chaqirishimiz kerak, obj.keys()
emas.
Nega shunday? Asosiy sabab – bu moslashuvchanlik. Eslasak, obyektlar JavaScript’dagi barcha murakkab tuzilmalarning asosi hisoblanadi. Shunday qilib, bizda o'zimizning data.values()
metodiga ega bo'lgan ob'ekt bo'lishi mumkin. Shunda ham biz unga Object.values(data)
ni qo'llashimiz mumkin.
Ikkinchi farq shundaki, Object.*
metodlari iterable emas, balki “haqiqiy” massivni qaytaradi. Bu asosan tarixiy sabablarga ko'ra.
Masalan:
Mana, Object.values
dan foydalanib, obyekt qiymatlarini aylantirish misoli:
Object.keys/values/entries simbolik xususiyatlarni e'tiborsiz qoldiradi
for..in
sikli kabi, bu metodlar Symbol(...)
kalitlari bilan bog'liq xususiyatlarni e'tiborsiz qoldiradi.
Odatda bu qulay. Ammo agar bizga simbolik kalitlar ham kerak bo'lsa, u holda Object.getOwnPropertySymbols
metodidan foydalanishimiz mumkin, bu faqat simbolik kalitlarni qaytaradi. Shuningdek, Reflect.ownKeys(obj)
metodi mavjud bo'lib, u barcha kalitlarni qaytaradi.
Obyektlarni o'zgartirish
Obyektlarda array uchun mavjud bo'lgan map
, filter
kabi ko'plab metodlar mavjud emas.
Agar biz ularni qo'llashni xohlasak, unda Object.entries
va Object.fromEntries
dan foydalanishimiz mumkin:
Object.entries(obj)
yordamida obyektdan [kalit/qiymat] juftliklarini olamiz.- Ushbu juftliklarga array metodlarini qo'llaymiz, masalan
map
, ularni o'zgartirish uchun. - Olingan massivni
Object.fromEntries(array)
orqali yana obyektga aylantiramiz.
Masalan, bizda narxlar mavjud va ularni ikki baravar oshirmoqchimiz:
Dastlab bu qiyin ko'rinishi mumkin, lekin bir-ikki marta qo'llangandan so'ng, tushunish osonlashadi. Biz shu tarzda kuchli transformatsiyalar zanjirlarini yaratishimiz mumkin.