Massivlarni yaratish
Massivlarni yaratishning bir nechta usuli mavjud. Keyingi quyi bo'limlar massivlarni quyidagilar yordamida qanday yaratishni tushuntiradi:
- Massiv literallari
- Iteratsiya qilinadigan (
iterable
) obyektda...
yoyish (spread
) operatori Array()
konstruktoriArray.of()
vaArray.from()
fabrika metodlari
Massiv literallari
Massiv yaratishning eng oddiy yo'li, shubhasiz, massiv literalidan foydalanishdir. Bu shunchaki kvadrat qavslar ichidagi, vergul bilan ajratilgan massiv elementlari ro'yxatidir. Masalan:
Massiv literalidagi qiymatlar konstanta bo'lishi shart emas; ular ixtiyoriy ifodalar bo'lishi mumkin:
Massiv literallari o'z ichiga obyekt literallarini yoki boshqa massiv literallarini olishi mumkin:
Agar massiv literali ketma-ket bir nechta vergulni o'z ichiga olsa va ular orasida qiymat bo'lmasa, massiv siyrak (sparse
) bo'ladi (§7.3-bo'limga qarang). Qiymatlari tushirib qoldirilgan massiv elementlari mavjud bo'lmaydi, lekin agar ularni so'rasangiz, undefined
bo'lib ko'rinadi:
Massiv literali sintaksisi ixtiyoriy ortiqcha vergulga ruxsat beradi, shuning uchun [,,]
massivining uzunligi 3 emas, 2 ga teng.
Yoyish (spread
) operatori
ES6 va undan keyingi versiyalarda bir massivning elementlarini boshqa bir massiv literali ichiga kiritish uchun "yoyish (spread
) operatori" ...
'dan foydalanishingiz mumkin:
Uchta nuqta a
massivini "yoyadi", natijada uning elementlari yaratilayotgan massiv literalining elementlariga aylanadi. Bu xuddi ...a
ifodasi a
massivining elementlari bilan almashtirilib, o'rab turuvchi massiv literalining bir qismi sifatida yozilgandek bo'ladi. (E’tibor bering, garchi biz bu uchta nuqtani yoyish operatori deb atasak-da, bu haqiqiy operator emas, chunki u faqat massiv literallarida va kitobning keyingi qismlarida ko'rib chiqadiganimizdek, funksiya chaqiruvlarida ishlatilishi mumkin.)
Yoyish operatori massivning yuzaki (shallow
) nusxasini yaratishning qulay usulidir:
Yoyish operatori har qanday iteratsiya qilinadigan (iterable
) obyekt bilan ishlaydi. (Iteratsiya qilinadigan obyektlar — bu for/of
sikli aylanib chiqadigan obyektlardir; biz ularni birinchi marta §5.4.4-bo'limda ko'rgan edik va ular haqida 12-bobda ancha ko'proq ma’lumot olamiz.) Satrlar iteratsiya qilinadi, shuning uchun siz yoyish operatoridan har qanday satrni bitta belgidan iborat satrlar massiviga aylantirish uchun foydalanishingiz mumkin:
Set
obyektlari (§11.1.1) iteratsiya qilinadi, shuning uchun massivdan takrorlanuvchi elementlarni olib tashlashning oson yo'li — bu massivni Set
'ga o'zgartirib, so'ngra Set
'ni darhol yoyish operatori yordamida massivga qayta o'zgartirishdir:
Array()
konstruktori
Massiv yaratishning yana bir yo'li — bu Array()
konstruktoridan foydalanish. Bu konstruktorni uch xil usulda chaqirish mumkin:
- Hech qanday argumentsiz chaqirish:
Bu usul hech qanday elementi bo'lmagan bo'sh massiv yaratadi va []
massiv literaliga ekvivalentdir.
- Uzunlikni belgilovchi yagona sonli argument bilan chaqirish:
Bu usul belgilangan uzunlikdagi massiv yaratadi. Array()
konstruktorining bu shaklidan qancha element kerak bo'lishi oldindan ma’lum bo'lganda massivni oldindan ajratib qo'yish uchun foydalanish mumkin. E’tibor bering, massivda hech qanday qiymat saqlanmaydi va hatto massiv uchun "0", "1" va hokazo kabi massiv indeks xossalari shakllantirilmaydi ham.
- Massiv uchun ikki yoki undan ortiq elementni yoki yagona sonli bo'lmagan elementni aniq ko'rsatish:
Bu shaklda konstruktor argumentlari yangi massivning elementlariga aylanadi. Array()
konstruktorining bu tarzda ishlatilishidan ko'ra massiv literalidan foydalanish deyarli har doim soddaroqdir.
Array.of()
Array()
konstruktor funksiyasi bitta sonli argument bilan chaqirilganda, u bu argumentni massiv uzunligi sifatida ishlatadi. Lekin bir nechta sonli argument bilan chaqirilganda, u bu argumentlarni yaratilishi kerak bo'lgan massivning elementlari sifatida qabul qiladi. Bu shuni anglatadiki, Array()
konstruktoridan yagona sonli elementga ega bo'lgan massiv yaratish uchun foydalanib bo'lmaydi.
ES6'da Array.of()
funksiyasi aynan shu muammoni hal qiladi: bu o'zining argument qiymatlarini (ularning sonidan qat’i nazar) massiv elementlari sifatida ishlatib, yangi massiv yaratadigan va qaytaradigan fabrika metodi (factory method
)'dir:
Array.from()
Array.from()
— bu ES6'da kiritilgan yana bir massiv fabrika metodidir. U birinchi argument sifatida iteratsiya qilinadigan (iterable
) yoki massivsimon (array-like
) obyektni kutadi va o'sha obyektning elementlarini o'z ichiga olgan yangi massivni qaytaradi. Iteratsiya qilinadigan argument bilan Array.from(iterable)
xuddi yoyish (spread
) operatori [...iterable]
kabi ishlaydi. Bu, shuningdek, massivning nusxasini yaratishning oddiy usulidir:
Array.from()
shuningdek, massivsimon obyektning haqiqiy massiv nusxasini yaratish yo'lini taqdim etgani uchun ham muhimdir. Massivsimon obyektlar — bu sonli length
xossasiga ega bo'lgan va qiymatlari nomlari tasodifan butun sonlar bo'lib qolgan xossalar bilan saqlanadigan, massiv bo'lmagan obyektlardir. Klient tomonidagi JavaScript bilan ishlayotganda, ba’zi veb-brauzer metodlarining qaytaradigan qiymatlari massivsimon bo'ladi va agar ularni avval haqiqiy massivlarga o'zgartirib olsangiz, ular bilan ishlash osonroq bo'lishi mumkin:
Array.from()
ixtiyoriy ikkinchi argumentni ham qabul qiladi. Agar siz ikkinchi argument sifatida funksiya uzatsangiz, u holda yangi massiv qurilayotganda, manba obyektdan olingan har bir element siz ko'rsatgan funksiyaga uzatiladi va asl qiymat o'rniga funksiyaning qaytargan qiymati massivda saqlanadi. (Bu bobning keyingi qismida tanishtiriladigan massivning map()
metodiga juda o'xshaydi, lekin massiv qurilayotgan paytda moslashtirishni (mapping
) amalga oshirish, avval massivni qurib, so'ngra uni boshqa yangi massivga moslashtirishdan ko'ra samaraliroqdir.)