Mundarija (37)
- Bu darsda
- 1. Nega bu kerak?
- 2. slice — bo'lak kesib olish
- 2.1 Boshi va oxiri
- 2.2 Oxirini yozmasangiz
- 2.3 Manfiy indeks — oxiridan sanash
- 2.4 indexOf bilan birga
- 2.5 Chegaradan chiqsa — xato yo'q
- 3. Amaliyot: telefon raqamini formatlash
- 3.1 To'liq yechilgan misol
- 3.2 O'zingiz to'ldiring
- 4. substring va eskirgan substr
- 4.1 substring — slice ning qarindoshi
- 4.2 substr — ishlatmang
- 5. split — matnni bo'laklarga bo'lish
- 5.1 Ajratuvchi bo'yicha bo'lish
- 5.2 Natija — massiv
- 5.3 Har bir belgiga bo'lish
- 5.4 Chekka holatlar
- 6. repeat — takrorlash
- 7. padStart va padEnd — to'ldirish
- 7.1 padStart — boshidan to'ldirish
- 7.2 Karta raqamini yashirish
- 7.3 padEnd — oxiridan to'ldirish
- 7.4 To'ldirish qoidalari
- 8. Ko'p uchraydigan xatolar
- 8.1 "Oxiri ham kiradi" deb o'ylash
- 8.2 Natijani saqlamaslik
- 8.3 Songa padStart
- 8.4 Manfiy repeat
- 8.5 split natijasini satr deb o'ylash
- 9. Mashqlar
- 1-mashq (oson): Natijani oldindan ayting
- 2-mashq (o'rta): Taksi cheki
- 3-mashq (qiyin): Mijoz kartochkasi
- 10. Real ishda
- Xulosa
JavaScript'da satrni kesish, bo'lish va to'ldirish: slice, split, padStart
Qisqacha:
matn.slice(boshi, oxiri)satrdan bo'lak kesib oladi;oxiriindeksidagi belgi kirmaydi, manfiy indeks esa oxiridan sanaladi.split(",")matnni ajratuvchi bo'yicha ro'yxatga (massivga) bo'ladi.padStartvapadEndsatrni kerakli uzunlikkacha to'ldiradi ("7".padStart(2, "0")→"07"),repeatesa satrni takrorlaydi. Asl satr hech qachon o'zgarmaydi.
Bu darsda
slicebilan satrdan istalgan bo'lakni, jumladan oxiridan, kesib ola olasiz.slice,substringva eskirgansubstrfarqini bilasiz.splitbilan matnni bo'laklarga ajrata olasiz va natija nima ekanini tushunasiz.padStart,padEndvarepeatbilan matnni chiroyli formatlay olasiz.- Telefon raqamini
+998 90 123 45 67ko'rinishiga keltira olasiz va karta raqamini yashira olasiz.
Oldin bilishingiz kerak: String asoslari, Template literals, Matn ichida qidirish.
1. Nega bu kerak?
Siz yetkazib berish xizmati uchun ilova yozyapsiz. Bazada mijoz telefoni shunday saqlangan: 998901234567. Ekranda esa odam o'qiy oladigan ko'rinish kerak: +998 90 123 45 67.
Yana bir nechta shunga o'xshash vazifa bor:
- To'lov sahifasida karta raqamini to'liq ko'rsatib bo'lmaydi. Faqat oxirgi 4 raqam:
**** **** **** 1234. - Buyurtma raqami doim olti xonali bo'lsin:
42emas,000042. - Formadan "Aliyev Jasur" keldi. Familiya va ismni alohida saqlash kerak.
Hammasida bitta ish bor: matnni bo'laklarga ajratish yoki unga belgi qo'shish. Oldingi darsda bo'lak qayerda turganini topishni o'rgandik. Endi shu joydan kesamiz, bo'lamiz va to'ldiramiz.
2. slice — bo'lak kesib olish
2.1 Boshi va oxiri
slice (inglizcha "bo'lak", "tilim") satrning bir qismini yangi satr qilib qaytaradi. Ikki argument oladi: qaysi indeksdan boshlash va qaysi indeksda to'xtash.
const shahar = "Samarqand";
console.log(shahar.slice(0, 5)); // Samar
console.log(shahar.slice(5, 9)); // qandMuhim qoida: oxiri kirmaydi. slice(0, 5) — 0, 1, 2, 3, 4-indekslar. 5-indeksdagi q ikkinchi bo'lakka o'tdi.
Buni eslab qolishning qulay usuli bor. Indeksni belgining o'zi emas, belgilar orasidagi chiziq deb tasavvur qiling. Xuddi non kesadigan pichoq izlari kabi:
| S | a | m | a | r | q | a | n | d |
0 1 2 3 4 5 6 7 8 9slice(0, 5) — 0-chiziqdan 5-chiziqqacha kesish. Orasida aynan 5 ta belgi: Samar. Shu sabab foydali qoida chiqadi: bo'lak uzunligi = oxiri - boshi.
2.2 Oxirini yozmasangiz
Ikkinchi argument bo'lmasa, slice matn oxirigacha kesadi:
const shahar = "Samarqand";
console.log(shahar.slice(5)); // qand
console.log(shahar.slice(0)); // Samarqand2.3 Manfiy indeks — oxiridan sanash
String asoslari darsida at(-1) oxirgi belgini berishini ko'rgandik. slice ham manfiy indeksni tushunadi: -1 — oxirgi belgi, -2 — undan oldingisi.
const karta = "8600123456781234";
console.log(karta.slice(-4)); // 1234
console.log(karta.slice(0, -4)); // 860012345678slice(-4) — "oxirgi 4 ta belgi". Karta raqami 16 xonali bo'ladimi yoki 19 — farqi yo'q, doim oxirgi to'rttasi olinadi. slice(0, -4) esa teskarisi: "oxirgi 4 tadan tashqari hammasi".
Manfiy indekslarni chiziqlar ostiga yozsak:
| S | a | m | a | r | q | a | n | d |
-9 -8 -7 -6 -5 -4 -3 -2 -12.4 indexOf bilan birga
slice ning eng kuchli tomoni — oldingi darsdagi qidirish metodlari bilan birga ishlashi. Indeksni topamiz, keyin shu joydan kesamiz:
const email = "jasur@gmail.com";
const at = email.indexOf("@");
console.log(email.slice(0, at)); // jasur
console.log(email.slice(at + 1)); // gmail.com@ 5-indeksda. slice(0, 5) — undan oldingi qism, @ ning o'zi kirmaydi. slice(6) — @ dan keyingi qism. + 1 bo'lmasa, natija @gmail.com bo'lardi.
Fayl kengaytmasi ham xuddi shunday olinadi — oxirgi nuqta bo'yicha:
const fayl = "hisobot.2026.pdf";
const nuqta = fayl.lastIndexOf(".");
console.log(fayl.slice(nuqta + 1)); // pdf
console.log(fayl.slice(0, nuqta)); // hisobot.20262.5 Chegaradan chiqsa — xato yo'q
const ism = "Ali";
console.log(ism.slice(0, 100)); // Ali
console.log(ism.slice(10) === ""); // trueSatrda 100 ta belgi yo'q, lekin slice xato bermaydi — borini qaytaradi. Boshi matndan tashqarida bo'lsa, bo'sh satr "" qaytadi. Bu qulay, lekin xatoni yashirishi ham mumkin: indeksni noto'g'ri hisoblasangiz, JavaScript sizni ogohlantirmaydi.
Tekshirib ko'ring:
const s = "Buxoro";bo'lsa,s.slice(1, 4),s.slice(-2)vas.slice(2)nima qaytaradi?
Javob
"uxo", "ro" va "xoro". Birinchisida 1, 2, 3-indekslar olinadi, 4-indeks kirmaydi. Ikkinchisi — oxirgi ikki belgi. Uchinchisi — 2-indeksdan oxirigacha.
3. Amaliyot: telefon raqamini formatlash
3.1 To'liq yechilgan misol
Bazadagi 998901234567 ni +998 90 123 45 67 ga aylantiramiz. Avval raqamni bo'laklarga bo'lib, har birining indekslarini aniqlaymiz:
| Bo'lak | Indekslar | Kod |
|---|---|---|
998 |
0–2 | slice(0, 3) |
90 |
3–4 | slice(3, 5) |
123 |
5–7 | slice(5, 8) |
45 |
8–9 | slice(8, 10) |
67 |
10–11 | slice(10) |
Endi bo'laklarni template literal ichida yig'amiz:
const tel = "998901234567";
const chiroyli = `+${tel.slice(0, 3)} ${tel.slice(3, 5)} ${
tel.slice(5, 8)} ${tel.slice(8, 10)} ${tel.slice(10)}`;
console.log(chiroyli); // +998 90 123 45 67Har bir ${...} ichida bittadan slice. Ular orasidagi bo'sh joylar matnning o'ziga tushadi. Uzun qatorni telefon ekraniga sig'ishi uchun ${ dan keyin ikkiga bo'ldik — natija o'zgarmaydi.
E'tibor bering: har bir slice ning oxiri keyingisining boshi bilan bir xil (3, 5, 8, 10). Bu "oxiri kirmaydi" qoidasining foydasi: bo'laklar bir-biriga yopishib turadi, orada belgi yo'qolmaydi.
3.2 O'zingiz to'ldiring
Endi bazada raqam + bilan saqlangan: +998931112233. Uni 93 111 22 33 ko'rinishiga keltiring (davlat kodisiz). Indekslar bitta surildi, chunki boshida + bor:
const tel = "+998931112233";
const qisqa = `${tel.slice(4, )} ${tel.slice(6, 9)} ${
tel.slice(, 11)} ${tel.slice()}`;
console.log(qisqa); // 93 111 22 33Yechim
const tel = "+998931112233";
const qisqa = `${tel.slice(4, 6)} ${tel.slice(6, 9)} ${
tel.slice(9, 11)} ${tel.slice(11)}`;
console.log(qisqa); // 93 111 22 33+998 — 0–3 indekslar, operator kodi 4-indeksdan boshlanadi. Har bir bo'lakning oxiri keyingisining boshi.
4. substring va eskirgan substr
4.1 substring — slice ning qarindoshi
Kodda substring ni ham uchratasiz. Musbat indekslarda u slice bilan bir xil ishlaydi:
const shahar = "Samarqand";
console.log(shahar.substring(0, 5)); // Samar
console.log(shahar.slice(0, 5)); // SamarFarq ikki holatda ko'rinadi:
const s = "Salom";
console.log(s.slice(-3)); // lom
console.log(s.substring(-3)); // Salom
console.log(s.slice(3, 1) === ""); // true
console.log(s.substring(3, 1)); // alsubstringmanfiy indeksni tushunmaydi — uni0deb oladi. Shuning uchunsubstring(-3)butun satrni qaytardi.substringda boshi oxiridan katta bo'lsa, u ikkalasini o'rnini almashtiradi:substring(3, 1)=substring(1, 3).sliceesa bunday holatda bo'sh satr beradi.
slice |
substring |
|
|---|---|---|
| Manfiy indeks | Oxiridan sanaydi | 0 deb oladi |
| Boshi > oxiri | "" |
O'rnini almashtiradi |
Qaysi birini ishlatish kerak? slice ni. U manfiy indeksni tushunadi va boshqa joylarda ham xuddi shunday ishlaydi — massivlarda ham slice bor. substring ni esa boshqalarning kodida tanib olsangiz yetarli.
4.2 substr — ishlatmang
Eski kodda substr ham uchraydi. Uning ikkinchi argumenti — oxirgi indeks emas, nechta belgi olish:
console.log("Salom".substr(1, 3)); // alosubstr rasmiy standartda eskirgan (deprecated) deb belgilangan. U hali ishlaydi, lekin yangi kodda yozilmaydi. VS Code uni ustidan chizib ko'rsatadi. Ko'rsangiz — slice ga almashtiring: substr(1, 3) = slice(1, 1 + 3).
Tekshirib ko'ring:
"Toshkent".slice(-4)va"Toshkent".substring(-4)nima qaytaradi?
Javob
"kent" va "Toshkent". slice manfiy indeksni oxiridan sanaydi — oxirgi 4 belgi. substring esa -4 ni 0 deb oladi va butun satrni qaytaradi.
5. split — matnni bo'laklarga bo'lish
5.1 Ajratuvchi bo'yicha bo'lish
slice bitta bo'lak kesadi. Ba'zan esa matnni birdaniga ko'p bo'lakka ajratish kerak. Masalan, formadan to'liq ism keldi: "Aliyev Jasur". split (inglizcha "bo'lmoq") matnni berilgan ajratuvchi (separator) belgi bo'yicha bo'ladi:
const toliq = "Aliyev Jasur";
console.log(toliq.split(" ")); // [ 'Aliyev', 'Jasur' ]Ajratuvchi — bo'sh joy " ". split matnni har bir bo'sh joyda "kesdi", bo'sh joylarning o'zi esa tashlab yuborildi.
Boshqa ajratuvchilar bilan:
const sana = "2026-09-27";
const bozor = "olma, nok, uzum";
console.log(sana.split("-")); // [ '2026', '09', '27' ]
console.log(bozor.split(", ")); // [ 'olma', 'nok', 'uzum' ]Ikkinchi misolda ajratuvchi ikki belgidan iborat: vergul va bo'sh joy. Ajratuvchi istalgan uzunlikda bo'lishi mumkin.
5.2 Natija — massiv
Natija yangi ko'rinishda chiqdi: kvadrat qavslar ichida, vergul bilan ajratilgan satrlar. Bu massiv (array) — qiymatlar ro'yxati. Xuddi bozorga olib boriladigan xaridlar ro'yxati kabi: bir varaqda bir nechta narsa, tartib bilan yozilgan.
Massiv — satr emas, alohida tur. Uni Massiv: yaratish va elementga murojaat darsida batafsil o'rganamiz. Hozircha uch narsani bilsangiz yetarli:
splitdoim massiv qaytaradi — hatto bitta bo'lak chiqsa ham.- Massivda satr metodlari yo'q. Ro'yxatning har bir bo'lagi bilan ishlashni massiv darslarida ko'ramiz.
typeofmassiv uchun"object"beradi — bunitypeofdarsida ko'rgandik.
const qismlar = "Aliyev Jasur".split(" ");
console.log(typeof qismlar); // objectBrauzer konsoli massivni biroz boshqacha ko'rsatadi: (2) ['Aliyev', 'Jasur']. Qavs ichidagi 2 — bo'laklar soni. Ma'nosi Node'dagi [ 'Aliyev', 'Jasur' ] bilan bir xil.
5.3 Har bir belgiga bo'lish
Ajratuvchi bo'sh satr "" bo'lsa, matn alohida belgilarga bo'linadi:
console.log("salom".split("")); // [ 's', 'a', 'l', 'o', 'm' ]Diqqat: Emoji bilan
split("")noto'g'ri ishlaydi — bitta emoji ikki "yarim belgi"ga bo'linib ketadi. Nega shunday bo'lishini Unicode va emoji darsida ko'ramiz.
5.4 Chekka holatlar
console.log("Salom".split("-")); // [ 'Salom' ]
console.log("olma,,nok".split(",")); // [ 'olma', '', 'nok' ]
console.log("a b c d".split(" ", 2)); // [ 'a', 'b' ]- Ajratuvchi topilmasa — butun matn bitta bo'lak bo'lib qaytadi.
- Ikki ajratuvchi yonma-yon kelsa — orasida bo'sh satr
''paydo bo'ladi. Foydalanuvchi tasodifan ikki marta vergul qo'ysa, ro'yxatda bo'sh bo'lak chiqadi. - Ikkinchi argument — nechta bo'lak kerakligi. Qolganlari tashlab yuboriladi.
Tekshirib ko'ring:
"Toshkent;Buxoro;Xiva".split(";")nima qaytaradi?"Toshkent".split(";")chi?
Javob
Birinchisi — [ 'Toshkent', 'Buxoro', 'Xiva' ], uch bo'lakli massiv. Ikkinchisi — [ 'Toshkent' ]: ajratuvchi topilmadi, lekin natija baribir massiv, ichida bitta bo'lak.
6. repeat — takrorlash
repeat satrni berilgan marta takrorlab, yangi satr qaytaradi. Konsolda chiziq chizish uchun juda qulay:
console.log("-".repeat(20)); // --------------------
console.log("ab".repeat(3)); // ababab20 ta tireni qo'lda sanab yozish shart emas. Chiziq uzunligini o'zgartirmoqchi bo'lsangiz, faqat bitta raqamni o'zgartirasiz.
Chek sarlavhasini yasaymiz:
const chiziq = "=".repeat(24);
console.log(chiziq);
console.log(" CHOYXONA «BAHOR»");
console.log(chiziq);Konsolda:
========================
CHOYXONA «BAHOR»
========================Bir nechta qoida:
repeat(0)— bo'sh satr"".- Kasr son pastga yaxlitlanadi:
"=".repeat(2.9)—"==". - Manfiy son xato beradi. Bu haqda "Ko'p uchraydigan xatolar" bo'limida.
7. padStart va padEnd — to'ldirish
7.1 padStart — boshidan to'ldirish
Soat 9 dan 5 daqiqa o'tdi. Ekranda 9:5 emas, 09:05 ko'rinishi kerak. padStart satrni kerakli uzunlikkacha boshidan to'ldiradi:
const soat = "9";
const daqiqa = "5";
const vaqt = `${soat.padStart(2, "0")}:${daqiqa.padStart(2, "0")}`;
console.log(vaqt); // 09:05padStart(2, "0") — "uzunlik 2 bo'lguncha boshiga 0 qo'sh". "9" bir belgili — bitta 0 qo'shildi. Birinchi argument — yakuniy uzunlik, qo'shiladigan belgilar soni emas.
Buyurtma raqami ham xuddi shunday:
console.log("42".padStart(6, "0")); // 000042
console.log("12345".padStart(6, "0")); // 012345
console.log("1234567".padStart(6, "0")); // 1234567Oxirgi qatorga qarang: satr allaqachon 6 dan uzun. padStart uni qisqartirmaydi — o'zgarishsiz qaytaradi.
7.2 Karta raqamini yashirish
To'lov sahifasida karta raqamining faqat oxirgi 4 raqami ko'rinadi. slice va padStart ni birlashtiramiz:
const karta = "8600123456781234";
const oxirgi = karta.slice(-4);
console.log(oxirgi.padStart(karta.length, "*")); // ************1234
console.log(`**** **** **** ${oxirgi}`); // **** **** **** 1234Birinchi usulda yulduzchalar soni karta uzunligiga moslashadi: 16 xonali Uzcard ham, 19 xonali karta ham to'g'ri yashiriladi. Ikkinchi usul — Click va Payme ilovalaridagi tanish ko'rinish.
repeat bilan ham bo'ladi: "*".repeat(12) + oxirgi. Lekin bunda 12 ni o'zingiz hisoblashingiz kerak.
Diqqat: Karta raqamini ekranda yashirish — faqat ko'rinish uchun. To'liq raqam baribir dastur ichida turibdi. Real to'lov tizimlarida to'liq karta raqami odatda sizning serveringizga umuman kelmaydi — uni to'lov xizmati (Click, Payme) saqlaydi. Bu haqda to'lov darslarida gaplashamiz.
7.3 padEnd — oxiridan to'ldirish
padEnd xuddi shunday ishlaydi, faqat belgilarni oxiriga qo'shadi. Chekda nomlar va narxlarni ustun qilib tekislash uchun ideal:
console.log("Non".padEnd(12, ".") + "4 000 so'm");
console.log("Choy".padEnd(12, ".") + "6 000 so'm");
console.log("Lag'mon".padEnd(12, ".") + "35 000 so'm");Konsolda:
Non.........4 000 so'm
Choy........6 000 so'm
Lag'mon.....35 000 so'mHar bir nom 12 belgigacha nuqta bilan to'ldirildi. Shuning uchun narxlar bir xil ustundan boshlanadi.
7.4 To'ldirish qoidalari
console.log("5".padStart(3) === " 5"); // true
console.log("5".padStart(4, "ab")); // aba5- Ikkinchi argumentni yozmasangiz, bo'sh joy bilan to'ldiriladi.
- To'ldiruvchi bir necha belgili bo'lsa, u takrorlanadi va ortiqchasi kesib tashlanadi:
aba+5. - Satr allaqachon yetarli uzun bo'lsa — hech narsa o'zgarmaydi.
Tekshirib ko'ring:
"7".padStart(3, "0")va"7".padEnd(3, "0")nima qaytaradi?
Javob
"007" va "700". Ikkalasida ham yakuniy uzunlik 3. padStart nollarni boshiga, padEnd esa oxiriga qo'shadi. Son sifatida 700 butunlay boshqa qiymat — shuning uchun raqamlarni to'ldirishda deyarli doim padStart kerak.
8. Ko'p uchraydigan xatolar
8.1 "Oxiri ham kiradi" deb o'ylash
const ism = "Malika";
console.log(ism.slice(0, 3)); // MalKo'pchilik slice(0, 3) to'rt belgi — 0, 1, 2, 3 — beradi deb kutadi. Aslida 3-indeks kirmaydi. Adashsangiz, chiziqlar rasmini eslang yoki qoidani qo'llang: uzunlik = oxiri - boshi = 3.
8.2 Natijani saqlamaslik
let ism = "Malikaxon";
ism.slice(0, 6);
console.log(ism); // Malikaxonslice asl satrni o'zgartirmaydi — satrlar o'zgarmas. U yangi satr qaytardi, lekin biz uni hech qayerga saqlamadik va natija yo'qolib ketdi. To'g'risi — natijani o'zgaruvchiga yozish:
let ism = "Malikaxon";
ism = ism.slice(0, 6);
console.log(ism); // MalikaBu qoida bu darsdagi barcha metodlarga tegishli: split, padStart, padEnd, repeat ham faqat yangi qiymat qaytaradi.
8.3 Songa padStart
const soat = 9;
console.log(soat.padStart(2, "0"));TypeError: soat.padStart is not a functionTarjimasi: "soat.padStart — funksiya emas". soat — son, padStart esa faqat satrlarda bor. Soat va daqiqa ko'pincha son bo'lib keladi, shuning uchun bu xato tez-tez uchraydi. Avval satrga aylantiring: String(soat).padStart(2, "0") (Turlarni o'zgartirish).
8.4 Manfiy repeat
console.log("-".repeat(-1));RangeError: Invalid count value: -1Tarjimasi: "Takrorlash soni noto'g'ri: -1". RangeError — "qiymat ruxsat etilgan oraliqdan tashqarida" degan xato turi. Satrni minus bir marta takrorlab bo'lmaydi. Bu ko'pincha son hisoblab chiqarilganda bo'ladi, masalan "-".repeat(20 - nom.length) da nom 20 belgidan uzun bo'lsa. Shunday joylarda padEnd xavfsizroq: u hech qachon xato bermaydi.
8.5 split natijasini satr deb o'ylash
const qismlar = "Aliyev Jasur".split(" ");
console.log(qismlar.startsWith("Aliyev"));TypeError: qismlar.startsWith is not a functionqismlar — satr emas, massiv. Massivda startsWith yo'q. split dan keyin satr bilan emas, ro'yxat bilan ishlayotganingizni unutmang. Ro'yxat bo'laklarini olishni massiv darsida o'rganamiz.
9. Mashqlar
1-mashq (oson): Natijani oldindan ayting
const s = "Namangan"; bo'lsa, har bir ifoda nima qaytaradi?
s.slice(0, 4)→s.slice(-3)→s.slice(2, -2)→"5".padStart(3, "0")→"ha".repeat(3)→
Yechim
const s = "Namangan";
console.log(s.slice(0, 4)); // Nama
console.log(s.slice(-3)); // gan
console.log(s.slice(2, -2)); // mang
console.log("5".padStart(3, "0")); // 005
console.log("ha".repeat(3)); // hahahaslice(2, -2) — 2-indeksdan boshlab, oxirgi ikki belgigacha. "Namangan" da -2 — 6-indeks (a), u kirmaydi. Natija: 2, 3, 4, 5-indekslar — mang.
2-mashq (o'rta): Taksi cheki
Taksi safari 7 soat 4 daqiqada boshlandi va 25 000 so'm turadi. Quyidagicha chek chiqaring:
------------------------------
Boshlanish...............07:04
Narx...............25 000 so'm
------------------------------Talablar:
- Chiziq —
"-".repeat(30)bilan. - Soat va daqiqa
const soat = "7";,const daqiqa = "4";o'zgaruvchilarida. UlarnipadStart(2, "0")bilan ikki xonali qiling. - "Boshlanish" va "Narx" so'zlari
padEndbilan nuqta qo'shib to'ldirilsin. Ishora: har qatorning umumiy uzunligi 30 bo'lishi uchun nom va qiymatni alohida o'ylang:"Narx".padEnd(19, ".")+"25 000 so'm"(11 belgi).
Yechim
const soat = "7";
const daqiqa = "4";
const vaqt = `${soat.padStart(2, "0")}:${daqiqa.padStart(2, "0")}`;
const chiziq = "-".repeat(30);
console.log(chiziq);
console.log("Boshlanish".padEnd(25, ".") + vaqt);
console.log("Narx".padEnd(19, ".") + "25 000 so'm");
console.log(chiziq);Konsolda:
------------------------------
Boshlanish...............07:04
Narx...............25 000 so'm
------------------------------vaqt 5 belgi (07:04), shuning uchun "Boshlanish" 25 gacha to'ldirildi: 25 + 5 = 30. Narx 11 belgi, demak "Narx" 19 gacha: 19 + 11 = 30. Uzunlikni o'zingiz hisoblashni xohlamasangiz, qiymatni padStart(15) bilan ham tekislash mumkin — ikkala usul ham to'g'ri.
3-mashq (qiyin): Mijoz kartochkasi
Bazadan mijoz haqida shunday ma'lumot keldi:
const tel = "998971234567";
const karta = "9860123412345678";
const fayl = "pasport_nusxa.jpg";Konsolga chiqaring:
- Telefon:
+998 97 123 45 67ko'rinishida ("Telefon raqamini formatlash" bo'limidagi usul). - Karta:
**** **** **** 5678ko'rinishida. Ishora:slice(-4)va template literal. - Fayl kengaytmasi:
jpg. Ishora:lastIndexOf(".")vaslice. - Fayl nomi kengaytmasiz:
pasport_nusxa.
Yechim
const tel = "998971234567";
const karta = "9860123412345678";
const fayl = "pasport_nusxa.jpg";
const chiroyliTel = `+${tel.slice(0, 3)} ${tel.slice(3, 5)} ${
tel.slice(5, 8)} ${tel.slice(8, 10)} ${tel.slice(10)}`;
const yashirinKarta = `**** **** **** ${karta.slice(-4)}`;
const nuqta = fayl.lastIndexOf(".");
console.log(chiroyliTel); // +998 97 123 45 67
console.log(yashirinKarta); // **** **** **** 5678
console.log(fayl.slice(nuqta + 1)); // jpg
console.log(fayl.slice(0, nuqta)); // pasport_nusxanuqta o'zgaruvchisi ikki marta ishlatildi. Indeksni bir marta topib, saqlab qo'yish — kodni o'qishni ham, tuzatishni ham osonlashtiradi. 9860 bilan boshlanadigan kartalar — Humo, 8600 — Uzcard.
10. Real ishda
- Formatlash. Telefon, karta, hisob raqami, sana — hammasi bazada "xom" saqlanadi va ekranga chiqishdan oldin
slicevapadStartbilan bezatiladi. - Fayllar. Yuklangan fayl nomidan kengaytma ajratiladi: rasmmi, hujjatmi.
- CSV fayllar. Excel'dan eksport qilingan jadval qatorlari
split(",")bilan ustunlarga bo'linadi. - Terminal dasturlari.
padEndvarepeatbilan konsolda chiroyli jadval va chiziqlar chiziladi.
Intervyuda "slice va substring farqi nima?" savoli tez-tez beriladi. Endi javobingiz tayyor: manfiy indeks va argumentlar tartibi.
Xulosa
slice(boshi, oxiri)— bo'lak kesadi,oxirikirmaydi. Manfiy indeks oxiridan sanaydi:slice(-4)— oxirgi 4 belgi.substringmanfiy indeksni0deb oladi.substreskirgan — yangi koddasliceishlating.split(ajratuvchi)matnni bo'laklarga bo'ladi va massiv qaytaradi.padStartvapadEndsatrni berilgan uzunlikkacha to'ldiradi;repeattakrorlaydi.- Bu metodlarning hech biri asl satrni o'zgartirmaydi — natijani o'zgaruvchiga saqlang.
Keyingi dars: Matnni o'zgartirish va tozalash — katta-kichik harfga o'tkazish, ortiqcha bo'sh joylarni olib tashlash va matn ichidagi so'zlarni almashtirishni o'rganamiz.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!