Destrukturizatsiya
JavaScript'da ma'lumotlar ko'pincha massiv yoki obyektlarda saqlanadi. Destrukturizatsiya (destructuring assignment) โ bu massiv yoki obyektni alohida o'zgaruvchilarga bir satrda "ochib" olishning qulay usuli.
Massiv destrukturizatsiyasi
Massivni o'zgaruvchilarga ajratib olishga misol:
Endi arr[0] va arr[1] o'rniga ma'noli nomdagi o'zgaruvchilar bilan ishlaymiz. Bu shunchaki qisqartma โ asl massiv o'zgarmaydi.
Keraksiz elementlarni vergul bilan tashlab ketish mumkin:
Chap tomonda istalgan iterable tursa bo'ladi โ masalan, satrni ham ajratish mumkin:
Standart (default) qiymatlar
Agar massivda o'zgaruvchilardan kamroq element bo'lsa, ortiqcha o'zgaruvchilar undefined bo'ladi. Buning oldini olish uchun standart qiymat berish mumkin:
Qiymatlarni almashtirish (swap)
Destrukturizatsiya yordamida ikki o'zgaruvchining qiymatini vaqtinchalik o'zgaruvchisiz almashtirish mumkin โ bu juda mashhur usul:
Bu yerda o'ng tomonda vaqtinchalik [admin, mehmon] massivi yasaladi va darhol chap tomondagi o'zgaruvchilarga ajratib beriladi.
Qoldiq "...rest"
Agar massiv o'zgaruvchilardan uzun bo'lsa, qolgan barcha elementlarni bitta massivga yig'ib olish uchun ...rest ishlatiladi:
...rest har doim eng oxirida turishi shart. [...boshi, oxirgi] ko'rinishida yozib bo'lmaydi โ bu xatolik beradi.Obyekt destrukturizatsiyasi
Obyektlarni ham destrukturizatsiya qilish mumkin. Bu holda kvadrat qavs [] o'rniga jingalak qavs {} ishlatiladi va o'zgaruvchi nomlari kalitlarga mos bo'lishi kerak:
E'tibor bering: massivdan farqli o'laroq, obyektda tartib muhim emas. O'zgaruvchi nomi kalitga mos kelsa bo'ldi.
Yangi nom berish
Agar o'zgaruvchiga kalitdan boshqa nom bermoqchi bo'lsak, kalit: yangiNom sintaksisidan foydalanamiz:
Yangi nom va standart qiymatni birga ishlatish ham mumkin:
Ichma-ich (nested) destrukturizatsiya
Agar obyekt ichida boshqa obyekt yoki massiv bo'lsa, tuzilmani takrorlab, ichki qiymatlarni ham ajratib olish mumkin:
olcham va ranglar nomlari bu yerda o'zgaruvchiga aylanmaydi โ ular faqat ichkariga "kirish" uchun ishlatiladi. Faqat eng ichki qiymatlar o'zgaruvchi bo'ladi.Funksiya parametrlarida destrukturizatsiya
Destrukturizatsiyaning eng foydali qo'llanilishlaridan biri โ funksiya ko'p parametr olganda. Agar ularni bitta obyekt sifatida uzatsak, funksiya ichida ularni qulay ajratib olamiz:
Bu usul "nomlangan argumentlar" (named arguments) ta'sirini beradi โ chaqirishda argumentlar tartibini eslab qolish shart emas, faqat kerakli kalitlarni ko'rsatamiz.
= {} juda muhim: u funksiya hech qanday argumentsiz chaqirilganda ham xatolik bermasligini ta'minlaydi. Aks holda menyuYasa() chaqiruvi undefinedni destrukturizatsiya qilishga urinib xatolik beradi.Xulosa
- Destrukturizatsiya โ massiv/obyektni bir satrda o'zgaruvchilarga ochish usuli;
- Massivda tartib muhim (
[a, b]), obyektda esa kalit nomi muhim ({a, b}); - Standart qiymat:
[a = 5]yoki{a = 5}; - Almashtirish:
[x, y] = [y, x]; - Qoldiq:
[a, ...rest]โ qolgan elementlarni massivga yig'adi; - Obyektda yangi nom:
{kalit: yangiNom}; - Funksiya parametrlarida qo'llasa, "nomlangan argumentlar" hosil bo'ladi.