Ma'lumot turlari

Massiv metodlari

Massivlar ko'plab metodlarga ega. O'rganishni osonlashtirish uchun ularni guruhlarga ajratamiz: elementlarni qo'shish/o'chirish, qismini olish, qidirish, aylanib chiqish, saralash va massivni bitta qiymatga yig'ish (reduce).

Elementlarni qo'shish va o'chirish

Massiv oxiri va boshi bilan ishlash uchun bir nechta metodni allaqachon bilamiz:

Endi eng kuchli metod โ€” splice bilan tanishamiz. U massivning istalgan joyidan element o'chira oladi, qo'sha oladi va almashtira oladi.

Sintaksis: arr.splice(start, deleteCount, elem1, ..., elemN). U start indeksidan boshlab deleteCount ta elementni o'chiradi va o'rniga elem1..elemN larni qo'yadi. O'chirilgan elementlardan iborat massivni qaytaradi.

splice1.js
// natija shu yerda chiqadi

splice ham o'chirib, ham o'rniga qo'ya oladi:

splice2.js
// natija shu yerda chiqadi

Agar deleteCount ni 0 qilsak, hech narsa o'chirilmaydi โ€” faqat qo'shiladi:

splice3.js
// natija shu yerda chiqadi
start manfiy bo'lishi mumkin. Bu holda u oxiridan sanaladi: -1 โ€” oxirgi element, -2 โ€” oxiridan bittasi va hokazo.

slice โ€” qismini nusxalash

Metod arr.slice(start, end) massivning start dan end gacha (end o'z ichiga olmaydi) bo'lgan qismini yangi massiv qilib qaytaradi. Asl massivni o'zgartirmaydi.

slice.js
// natija shu yerda chiqadi
Argumentsiz arr.slice() massivning to'liq (sayoz) nusxasini yaratishning eng qulay usuli hisoblanadi.

concat โ€” massivlarni birlashtirish

Metod arr.concat(...args) asl massiv elementlarini va argument sifatida berilgan qiymatlarni birlashtirib, yangi massiv qaytaradi.

concat.js
// natija shu yerda chiqadi
Agar argument massiv bo'lsa, uning elementlari alohida-alohida qo'shiladi. Agar oddiy qiymat bo'lsa, o'zi qo'shiladi.

forEach โ€” har bir element bo'yicha yurish

Metod arr.forEach(funksiya) massivning har bir elementi uchun berilgan funksiyani chaqiradi. U hech narsa qaytarmaydi (undefined).

foreach.js
// natija shu yerda chiqadi

Funksiya uch argument oladi: (item, index, array) โ€” element qiymati, uning indeksi va massivning o'zi. Ko'pincha faqat birinchi ikkisi kerak bo'ladi.

Massivda qidirish: indexOf, includes, find, findIndex

Metod arr.indexOf(item) elementni boshidan qidiradi va topilsa indeksini, topilmasa -1 ni qaytaradi. arr.lastIndexOf(item) esa oxiridan qidiradi.

Metod arr.includes(item) element mavjud bo'lsa true, aks holda false qaytaradi โ€” mavjudlikni tekshirish uchun qulay.

indexof.js
// natija shu yerda chiqadi
indexOf tenglikni === orqali tekshiradi, shuning uchun NaN ni hech qachon topa olmaydi. Bunday holatda includes ishlatiladi.

Ba'zan shart bo'yicha (masalan, ma'lum xususiyatga ega obyektni) qidirish kerak bo'ladi. Bunda arr.find(funksiya) yordam beradi โ€” u funksiya birinchi marta true qaytargan elementni beradi.

find.js
// natija shu yerda chiqadi
find mos element topilmasa undefined, findIndex esa -1 qaytaradi. findLastIndex oxiridan qidiradi.

filter โ€” shartga mos elementlarni saralash

find bitta element qaytaradi. Agar shartga mos barcha elementlar kerak bo'lsa, arr.filter(funksiya) ishlatiladi. U funksiya true qaytargan barcha elementlardan yangi massiv tuzadi.

filter.js
// natija shu yerda chiqadi

map โ€” har bir elementni o'zgartirish

Metod arr.map(funksiya) โ€” massivlar bilan ishlashda eng ko'p ishlatiladigan metodlardan biri. U har bir elementga funksiyani qo'llaydi va natijalardan yangi massiv qaytaradi.

map.js
// natija shu yerda chiqadi

sort โ€” saralash (taqqoslash funksiyasi bilan!)

Metod arr.sort() massivni o'z joyida (asl massivni o'zgartirib) saralaydi va o'zini qaytaradi. Ammo muhim tuzoq bor:

Standart holatda sort elementlarni satr (string) sifatida saralaydi! Shuning uchun [1, 2, 15] emas, balki [1, 15, 2] chiqadi โ€” chunki '15' < '2' (lug'aviy taqqoslash).
sort-bad.js
// natija shu yerda chiqadi

To'g'ri saralash uchun sort ga taqqoslash funksiyasi beriladi. U ikki argument (a, b) oladi va: a avval kelishi kerak bo'lsa manfiy son, b avval kelishi kerak bo'lsa musbat son, teng bo'lsa 0 qaytarishi kerak.

sort-good.js
// natija shu yerda chiqadi

Sonlar uchun qisqartirilgan usul โ€” shunchaki ayirmani qaytarish. Kamayish tartibi uchun argumentlarni almashtiring:

sort-num.js
// natija shu yerda chiqadi
Satrlarni tilga mos (masalan, o'zbekcha yoki lotincha harflar) tartibda saralash uchun str.localeCompare dan foydalaning: arr.sort((a, b) => a.localeCompare(b)).

reverse, split va join

Metod arr.reverse() massiv elementlarini teskari tartibda qo'yadi (o'z joyida).

reverse.js
// natija shu yerda chiqadi

Metod str.split(delim) satrni berilgan ajratuvchi bo'yicha massivga bo'ladi. Aksincha, arr.join(glue) massiv elementlarini yopishtirib satr hosil qiladi.

split-join.js
// natija shu yerda chiqadi
str.split('') (bo'sh satr bilan) satrni harflarga ajratadi. split ga ikkinchi argument sifatida limit berish mumkin โ€” natija massivi uzunligini cheklaydi.

reduce va reduceRight โ€” massivni bitta qiymatga yig'ish

Ba'zan massiv asosida bitta qiymat hisoblash kerak: yig'indi, eng katta element, obyekt va hokazo. Buning uchun arr.reduce ishlatiladi.

Sintaksis: arr.reduce(function(akkumulyator, item, index, array) { ... }, boshlang'ich). Funksiya har bir element uchun chaqiriladi va uning natijasi keyingi chaqiruvga akkumulyator bo'lib uzatiladi.

reduce1.js
// natija shu yerda chiqadi

Ishlash bosqichma-bosqich (boshlang'ich = 0): 0+1=1, 1+2=3, 3+3=6, 6+4=10, 10+5=15.

reduce2.js
// natija shu yerda chiqadi
Agar boshlang'ich qiymat berilmasa, reduce birinchi elementni boshlang'ich sifatida oladi va ikkinchidan boshlaydi. Bo'sh massivda boshlang'ichsiz reduce xatolik beradi! Shuning uchun ko'p hollarda boshlang'ich qiymatni berish tavsiya etiladi.

arr.reduceRight xuddi shunday ishlaydi, lekin massivni o'ngdan chapga aylanib chiqadi.

Array.isArray โ€” massivmi yoki yo'q?

Massivlar alohida tur emas, ular object turiga asoslangan. Shuning uchun typeof massivni obyektdan ajrata olmaydi:

isarray.js
// natija shu yerda chiqadi
Ko'p metodlar (masalan sort, find, filter) funksiyaga qo'shimcha thisArg argumentini qabul qiladi โ€” u funksiya ichidagi this ni belgilaydi. Amalda arrow funksiyalar bilan bu deyarli kerak bo'lmaydi.

Xulosa