Arrays Methods
...
Massiv metodlari
Massivlar ko'p metodlarni taqdim etadi. Ishni osonlashtirish uchun, ushbu bo'limda ular guruhlarga ajratilgan.
Elementlarni qo'shish/olish
Avval biz oxiridan yoki boshidan elementlarni qo'shish yoki olish metodlarini bilamiz:
arr.push(...items)– elementlarni oxiriga qo'shadi,arr.pop()– oxiridan elementni olib tashlaydi,arr.shift()– boshidan elementni olib tashlaydi,arr.unshift(...items)– boshiga elementlarni qo'shadi.
Mana bir necha boshqalar.
splice
Massivdan elementni qanday olib tashlash mumkin?
Massivlar ob'ektlar bo'lgani uchun, delete ishlatishga harakat qilamiz:
Element olib tashlandi, lekin massivning uzunligi hali ham 3 bo'lib qoladi. Bu tabiiy, chunki delete obj.key qiymatni faqat kalit bo'yicha olib tashlaydi. Bu ob'ektlar uchun yaxshi. Lekin massivlarda biz odatda qolgan elementlarning bo'sh joyni egallashini kutamiz. Biz endi qisqaroq massivga ega bo'lishimizni kutamiz.
Shuning uchun, maxsus metodlar ishlatilishi kerak.
arr.splice metodi massivlar uchun Shveytsariya armiyasi pichog'i sifatida ishlaydi. U hamma narsani bajarishi mumkin: elementlarni qo'shish, olib tashlash va almashtirish.
Sintaksisi:
Bu arrni start indeksidan boshlab o'zgartiradi: deleteCount elementlarni olib tashlaydi va keyin elem1, ..., elemNni ularning o'rnida qo'shadi. Olib tashlangan elementlar massivini qaytaradi.
Bu metodni misollar bilan tushunish oson.
Boshlaymiz olib tashlashdan:
Oshkor, to'g'rimi? Indeks 1dan boshlab 1 elementni olib tashladi.
Keyingi misolda, 3 elementni olib tashlab, ularni boshqa ikkita bilan almashtiramiz:
splice olib tashlangan elementlarning massivini qaytaradi:
splice elementlarni olib tashlamasdan qo'shish imkonini ham beradi. Buning uchun deleteCountni 0 ga qo'ying:
Salbiy indekslar ruxsat etiladi
Bu va boshqa massiv metodlarida salbiy indekslar ruxsat etiladi. Ular massivning oxiridan pozitsiyani belgilaydi, masalan:
slice
arr.slice metodi arr.splicega qaraganda ancha oddiyroq.
Sintaksisi:
Bu yangi massiv qaytaradi, unda startdan endgacha (lekin endni o'z ichiga olmaydi) bo'lgan barcha elementlarni nusxalaydi. Har ikkala start va end salbiy bo'lishi mumkin, bu holda oxirdan pozitsiya qabul qilinadi.
Bu satr metodiga o'xshaydi, ammo substratlar o'rniga submassivlar yaratadi.
Masalan:
Agar argumentlarsiz chaqirsak, arr.slice() arrning nusxasini yaratadi. Bu ko'pincha asliy massivi ta'sir qilmaydigan qo'shimcha transformatsiyalar uchun nusxa olish uchun ishlatiladi.
concat
arr.concat metodi yangi massiv yaratadi, unda boshqa massivlar va qo'shimcha elementlar mavjud bo'ladi.
Sintaksisi:
Har qanday sonli argumentlarni qabul qiladi – yoki massivlar yoki qiymatlar.
Natija, arrdan, keyin esa arg1, arg2 va hokazo elementlarni o'z ichiga olgan yangi massivdir.
Agar argument argN massiv bo'lsa, undagi barcha elementlar nusxalanadi. Aks holda, argument o'zi nusxalanadi.
Masalan:
Odatda, u faqat massivlardan elementlarni nusxalaydi. Boshqa ob'ektlar, hatto ular massivlarga o'xshasa ham, butunlay qo'shiladi:
...Lekin agar massivga o'xshash ob'ekt Symbol.isConcatSpreadable xususiyatiga ega bo'lsa, unda u concat tomonidan massiv sifatida qabul qilinadi: uning elementlari qo'shiladi:
Iteratsiya: forEach
arr.forEach metodi har bir massiv elementi uchun funktsiyani bajarishga imkon beradi.
Sintaksisi:
Masalan, bu massivning har bir elementini ko'rsatadi:
Va bu kodning maqsadi, elementlarning maqsad massivdagi pozitsiyasini ko'rsatadi:
Funktsiyaning natijasi (agar mavjud bo'lsa) chiqariladi va e'tiborsiz qoldiriladi.
Massivni qidirish
Endi massivda qidirish metodlarini ko'rib chiqamiz.
indexOf/lastIndexOf
indexOf va lastIndexOf metodlari massivda biror elementning indeksini topadi.
Sintaksisi:
indexOf birinchi ko'rinishning indeksini qaytaradi, lastIndexOf esa oxirgi ko'rinishning indeksini qaytaradi. Agar kerakli element mavjud bo'lmasa, -1 qaytariladi.
Ularning ikkalasi ham ikkinchi argument sifatida qidirishni boshlash uchun indeksni qabul qiladi.
includes
arr.includes metodi true yoki false qaytaradi, agar massiv elementni o'z ichiga olsa yoki bo'lmasa.
Sintaksisi:
Agar kerakli qiymat mavjud bo'lsa, true qaytariladi, aks holda false.
find/findIndex
arr.find metodi massivdagi birinchi elementni qaytaradi, u berilgan shartlarga mos keladi.
Sintaksisi:
find birinchi mos keladigan elementni qaytaradi yoki undefined agar element topilmasa.
Masalan:
findIndex esa shartlarga mos keladigan elementning indeksini qaytaradi.
sort
arr.sort metodi massiv elementlarini saralash uchun ishlatiladi.
Sintaksisi:
Agar compareFunction bo'lsa, elementlar shu funksiyaning natijalariga ko'ra saralanadi. Agar compareFunction bo'lmasa, sort elementlarni ko'rsatish tartibida (string sifatida) saralaydi.
Misol:
Chunki sort metodining default tartibi string sifatida saralaydi. Bu tartibni o'zgartirish uchun maxsus solishtirish funksiyasini ishlatish kerak.
Masalan:
reverse
arr.reverse metodi massivning tartibini teskari qiladi.
Sintaksisi:
Masalan:
fill
arr.fill metodi massivdagi barcha elementlarni ma'lum qiymat bilan to'ldiradi.
Sintaksisi:
Massivning start indeksidan end indeksigacha (lekin endni o'z ichiga olmaydi) barcha elementlarni value qiymati bilan to'ldiradi.
Masalan:
copyWithin
arr.copyWithin metodi massivdagi elementlarni boshqa joyga nusxalaydi.
Sintaksisi:
target indeksiga start indeksidan boshlab end indeksigacha (lekin endni o'z ichiga olmaydi) barcha elementlarni nusxalaydi.
Misol:
split va join
Haqiqiy hayotdan bir misol. Biz xabarlar ilovasini yozmoqdamiz, va foydalanuvchi vergul bilan ajratilgan qabul qiluvchilar ro‘yxatini kiritadi: John, Pete, Mary. Lekin biz uchun bu yagona satrdan ko‘ra nomlar array'i qulayroq bo‘lar edi. Buni qanday olish mumkin?
str.split(delim) metodi buni amalga oshiradi. U satrni berilgan ajratuvchi delim bo‘yicha array'ga ajratadi.
Quyidagi misolda biz vergul va bo‘shliq orqali ajratamiz:
split metodining ikkinchi ixtiyoriy sonli argumenti mavjud – array uzunligiga cheklov qo‘yish uchun. Agar berilsa, ortiqcha elementlar e'tiborga olinmaydi. Amaliyotda bu kamdan-kam qo‘llaniladi:
Harflarga ajratish
Bo‘sh qiymat bilan split(s) chaqiruvi satrni harflarga ajratadi:
join
arr.join(glue) metodi esa split ga teskari amalni bajaradi. U arr elementlarini qayta stringga aylantiradi va ular orasiga glue qo‘yadi.
Misol uchun:
reduce/reduceRight
Agar bizga array'ni aylantirib chiqish kerak bo‘lsa – forEach, for yoki for..ofdan foydalanishimiz mumkin.
Agar bizga har bir element uchun ma'lumotlarni qaytarish kerak bo‘lsa – mapdan foydalanishimiz mumkin.
arr.reduce va arr.reduceRight metodlari ham shu turkumga kiradi, lekin biroz murakkabroq. Ular array asosida bitta qiymatni hisoblash uchun ishlatiladi.
Sintaksisi:
Funksiya barcha array elementlariga ketma-ket qo‘llanadi va oldingi qo‘ng‘iroq natijasini keyingisiga o‘tkazadi.
Argumentlar:
accumulator– oldingi funksiya chaqiruvining natijasi, birinchi chaqiruvdainitialga teng (agarinitialberilgan bo‘lsa).item– hozirgi array elementi.index– uning pozitsiyasi.array– array o‘zi.
Funksiya qo‘llanilganda, oldingi funksiya chaqiruvi natijasi keyingisiga birinchi argument sifatida o‘tadi. Shunday qilib, birinchi argument aslida barcha oldingi bajaruvlarning birlashtirilgan natijasini saqlaydigan to‘plovchi hisoblanadi. Va oxirida u reducening natijasiga aylanadi.
Misol yordamida buni osonroq tushunish mumkin.
Bu yerda biz array yig‘indisini bir qatorli kodda olamiz:
Funksiya chaqiruvida faqat 2 argument ishlatilgan, bu odatda yetarli.
Batafsil ko‘rib chiqamiz.
- Birinchi chaqiruvda
sumboshlang‘ich qiymat (ya'ni reduce oxirgi argumenti), 0 ga teng, vacurrentbirinchi array elementiga teng, ya'ni 1. Shunday qilib, funksiya natijasi 1. - Ikkinchi chaqiruvda,
sum= 1, biz unga ikkinchi array elementini (2) qo‘shamiz va qaytaramiz. - Uchinchi chaqiruvda,
sum= 3 va yana bir element qo‘shamiz, va hokazo…
Biz hisoblash jarayonini jadvalda ham ko‘rishimiz mumkin:
sum | current | result |
|---|---|---|
| 1-chaqiruv | 0 | 1 |
| 2-chaqiruv | 1 | 3 |
| 3-chaqiruv | 3 | 6 |
| 4-chaqiruv | 6 | 10 |
| 5-chaqiruv | 10 | 15 |
Shunday qilib, oldingi chaqiruvning natijasi keyingi chaqiruvning birinchi argumentiga aylanadi.
reduceRight xuddi shu tarzda ishlaydi, lekin o‘ngdan chapga qarab hisoblaydi.
Bu yerda biz oldingi chaqiruv natijasi keyingi chaqiruvning birinchi argumentiga aylanishini aniq ko'rishimiz mumkin.
Biz dastlabki qiymatni e'tiborsiz qoldirishimiz ham mumkin:
Natija o'sha. Chunki agar dastlabki qiymat mavjud bo'lmasa, reduce massivning birinchi elementini dastlabki qiymat sifatida qabul qiladi va iteratsiyani ikkinchi elementdan boshlaydi.
Hisoblash jadvali yuqoridagidek, birinchi qatorni chiqarib tashlagan holda.
Ammo bunday foydalanishda katta ehtiyotkorlik talab qilinadi. Agar massiv bo'sh bo'lsa, dastlabki qiymatsiz reduce chaqiruvi xatoga olib keladi.
Mana bir misol:
Shuning uchun har doim dastlabki qiymatni ko'rsatish tavsiya etiladi.
arr.reduceRight usuli ham xuddi shunday qiladi, lekin chapdan o'ngga qarab yuradi.
Array.isArray
Massivlar alohida til turi hosil qilmaydi. Ular obyektlar asosida tuzilgan.
Shunday qilib, typeof oddiy obyektni massivdan ajratishga yordam bermaydi:
...Ammo massivlar juda ko'p ishlatilgani uchun buni aniqlash uchun maxsus usul mavjud: Array.isArray(value). U qiymat massiv ekanligini qaytaradi, aks holda false qaytaradi.
Ko'p usullar "thisArg"ni qo‘llab-quvvatlaydi
Deyarli barcha massiv usullari funksiyalarni chaqiradi – masalan, find, filter, map, ammo sezilarli istisno bu sort. Ular ixtiyoriy qo‘shimcha parametr thisArgni qabul qiladi.
Bu parametr yuqoridagi bo‘limlarda tushuntirilmagan, chunki u kamdan-kam hollarda ishlatiladi. Ammo to'liq bo'lish uchun biz uni yoritishimiz kerak.
Mana bu usullarning to'liq sintaksisi:
thisArg parametri funksiyada thisga aylanadi.
Misol uchun, biz armiyaning obyektining usulini filtr sifatida ishlatamiz va thisArg kontekstni uzatadi:
Agar yuqoridagi misolda biz users.filter(army.canJoin) dan foydalangan bo'lsak, unda army.canJoin mustaqil funksiya sifatida chaqiriladi, this=undefined bilan, bu esa darhol xatoga olib keladi.
users.filter(army.canJoin, army) chaqiruvi users.filter(user => army.canJoin(user)) bilan almashtirilishi mumkin, bu xuddi shunday ishlaydi. Ikkinchisi odatda ko'proq ishlatiladi, chunki bu ko'pchilik uchun tushunarliroq.
Xulosa
Massiv usullarining qo‘llanma varaqasi:
Elementlarni qo'shish/o'chirish uchun:
push(...items)– elementlarni oxiriga qo'shadi,pop()– elementni oxiridan chiqaradi,shift()– elementni boshidan chiqaradi,unshift(...items)– elementlarni boshiga qo'shadi.splice(pos, deleteCount, ...items)– indeksposdadeleteCountelementni o'chiradi vaitemsni kiritadi.slice(start, end)– yangi massiv yaratadi,startindeksidanendgacha (shu jumladan emas) elementlarni nusxalaydi.concat(...items)– yangi massiv qaytaradi: joriy massivning barcha elementlarini nusxalaydi vaitemsni unga qo'shadi. Agaritemsdan biri massiv bo'lsa, uning elementlari olinadi.
Elementlar orasida qidirish uchun:
indexOf/lastIndexOf(item, pos)–posdan boshlab elementni qidiring va indeksni qaytaring yoki topilmasa -1.includes(value)– massivdavaluemavjud bo'lsa, true, aks holda false qaytaradi.find/filter(func)– funktsiya orqali elementlarni filtrlaydi, true qaytaradigan birinchi yoki barcha qiymatlarni qaytaradi.findIndexxuddifindkabi, lekin qiymat o'rniga indeksni qaytaradi.
Elementlarni takrorlash uchun:
forEach(func)– har bir element uchunfuncni chaqiradi, hech narsa qaytarmaydi.
Massivni o'zgartirish uchun:
map(func)– har bir element uchunfuncni chaqirib, natijadan yangi massiv yaratadi.sort(func)– massivni o‘z joyida saralaydi va uni qaytaradi.reverse()– massivni o‘z joyida teskari aylantiradi va uni qaytaradi.split/join– qatorni massivga aylantiradi va aksincha.reduce/reduceRight(func, initial)– massiv bo'ylab yagona qiymatni hisoblaydi, har bir element uchunfuncni chaqiradi va chaqiruvlar orasida oraliq natijani uzatadi.
Qo‘shimcha:
Array.isArray(value)qiymat massiv ekanligini tekshiradi, agar shunday bo'lsa true, aks holda false qaytaradi.
Diqqat qiling, sort, reverse va splice usullari massivning o‘zini o‘zgartiradi.
Bu usullar eng ko‘p ishlatiladiganlari bo‘lib, ular 99% foydalanish holatlarini qamrab oladi. Ammo bir nechta boshqalar ham mavjud:
arr.some(fn)/arr.every(fn)massivni tekshiradi.
Funktsiya fn xuddi map kabi massivning har bir elementi uchun chaqiriladi. Agar natijalardan biri/barchasi true bo‘lsa, true qaytaradi, aks holda false.
Ushbu usullar || va && operatorlariga o'xshash ishlaydi: agar fn some() chaqirilganida haqiqiy qiymat qaytarsa, arr.some() darhol true qaytaradi va qolgan elementlarni tekshirishni to'xtatadi; agar fn every() da yolg'on qiymat qaytarsa, arr.every() darhol false qaytaradi va qolgan elementlarni tekshirishni to'xtatadi.
Biz every yordamida massivlarni solishtirishimiz mumkin:
-
arr.fill(value, start, end)– massivnistartdanendgacha bo'lgan indekslar orasida takrorlanuvchi qiymat bilan to'ldiradi. -
arr.copyWithin(target, start, end)–startdanendgacha bo'lgan elementlarni o'zida,targetpozitsiyasida nusxalaydi (mavjudlarini o'zgartiradi). -
arr.flat(depth)/arr.flatMap(fn)– ko'p o'lchovli massivdan tekis massiv yaratadi.
To‘liq ro‘yxat uchun qo‘llanmaga qarang.
Dastlab, juda ko'p usullar bor kabi tuyulishi mumkin, ular yodda saqlash qiyin. Ammo aslida bu juda oson.
Qo‘llanmani ko‘rib chiqing, shunda ular bilan tanish bo‘lasiz. Keyin ushbu bobdagi vazifalarni yeching, shunda massiv usullari bilan tajribaga ega bo'lasiz.
Keyinchalik, agar siz massiv bilan biror narsa qilishni xohlasangiz va qanday qilishni bilmasangiz – bu yerga keling, qo‘llanmaga qarang va to‘g‘ri usulni toping. Misollar sizga to'g'ri yozishga yordam beradi. Tez orada siz usullarni avtomatik ravishda eslay olasiz, hech qanday maxsus harakatlarsiz.
Last updated on