Дарси 6 · JavaScript
Массивҳо ва методҳои онҳо
Ассалому алейкум! Ягон сайтро кушоед: рӯйхати молҳо дар мағозаи интернетӣ, лентаи паёмҳо дар чат, кортҳои тарабхонаҳо дар хизмати расонидан, ҷадвали автобусҳо. Ҳамаи ин — рӯйхатҳоанд, ва дар JavaScript рӯйхат массив номида мешавад. Додаҳо аз сервер қариб ҳамеша дар шакли массивҳо меоянд, ва кори барномасози фронтенд — ин массивро ба он чизе табдил додан аст, ки одам дар экран мебинад: филтр кардан, мураттаб кардан, натиҷаро ҳисоб кардан. Имрӯз мо меомӯзем, ки инро боварона анҷом диҳем.
Массивҳо эҷод кардан, унсурҳоро аз рӯи индекс хондан ва тағйир додан
Унсурҳоро илова ва нест кардан: push, pop, shift, unshift, splice
Қисмҳои массивро тавассути slice нусха бардоштан ва онро бо splice омехта накардан
Callback-ҳоро фаҳмидан ва map, filter, find, some, every-ро истифода бурдан
Натиҷаро тавассути reduce ҳисоб кардан ва тавассути sort дуруст мураттаб кардан
Методҳоро ба занҷир пайваст кардан, ҳамонанди фронтенд-барномасозони воқеӣ
01 Массив чист
То ҳол ҳар тағйирёбанда як қиматро нигоҳ медошт: як ном, як нарх, як баҳо. Аммо дар зиндагӣ додаҳо бештар бо рӯйхат меоянд: рӯйхати харидҳо дар Шоҳмансур, ҷадвали дарсҳои ҳафта, баҳоҳои тамоми гурӯҳ барои имтиҳон. Тағйирёбандаҳои item1, item2, item3… эҷод кардан нокулай аст: агар харидҳо сад бошанд-чӣ?
Массив — ин як тағйирёбанда аст, ки дар он рӯйхати мураттаби қиматҳо нигоҳ дошта мешавад. «Мураттаб» маънои онро дорад, ки ҳар қимат ҷойи худро дорад: якум, дуюм, сеюм ва ҳамин тавр минбаъд.
Монандӣ аз ҳаёт
Қатори Душанбе–Хуҷандро тасаввур кунед. Қатор — массив аст, вагонҳо — унсурҳои он. Вагонҳо қатъиян бо тартиб меистанд, ва ҳар кадом рақам дорад. Танҳо дар JavaScript рақамгузорӣ на аз 1, балки аз 0 оғоз мешавад: аввалин вагон — сифрум аст.
Тасвири дигар — ҳуҷайраҳои анбори ашёи шахсӣ дар вокзал: қатори ҳуҷайраҳои якхела, дар ҳар кадом рақам, дар ҳар кадом чизе мемонад. Рақамро медонед — фавран ҳуҷайраи лозимиро мекушоед.
Массив рӯйхати мураттаби қиматҳо дар қавсайни мураббаъ: ["нон", "чой"].
Унсур як қимат дар дохили массив, масалан "нон".
Индекс рақами ҷойи унсур. Аз сифр ҳисоб мешавад: 0, 1, 2…
Дарозӣ дар массив чанд унсур ҳаст. Тавассути .length мефаҳмем.
Массивро чӣ тавр эҷод кардан
Қавсайни мураббаъро менависем, дар дохил — қиматҳо бо вергул. Қавсайни холии [] — массиви холӣ аст, ки баъдан ба он чизе илова кардан мумкин аст.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const shopping = ["нон" , "чой" , "шакар" , "зардолу" ];
const scores = [78 , 92 , 65 ];
const empty = [];
console.log (shopping); // → ["нон", "чой", "шакар", "зардолу"]
console.log (scores); // → [78, 92, 65]
console.log (empty); // → []
Массиви shopping: дар боло қимат, дар поён индекс. Чор унсур, индексҳо аз 0 то 3.
Чаро индексҳо аз сифр оғоз мешаванд
Индекс — на «рақами тартибӣ», балки тафовут (смещение) аст: аз оғози массив чанд қадам лозим аст, то ба унсур расем. То унсури аввал рафтан лозим нест — сифр қадам, бинобар ин индекси он 0 аст. То дуюм — як қадам, индекс 1. Хотираи компютер ҳамин тавр сохта шудааст, ва қариб ҳамаи забонҳои барномасозӣ ҳамин тавр ҳисоб мекунанд.
Аз ин ҷо қоидаи содда: индекси унсури охирин = дарозӣ − 1 . Дар массиви 4 унсура индекси охирин — 3 аст.
Унсурҳоро мехонем: индекс, length, at
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const wagons = ["локомотив" , "вагон-ресторан" , "купе" , "плацкарт" ];
console.log (wagons.length); // → 4
console.log (wagons[0 ]); // → локомотив
console.log (wagons[2 ]); // → купе
console.log (wagons[wagons.length - 1 ]); // → плацкарт
console.log (wagons.at (-1 )); // → плацкарт
console.log (wagons.at (-2 )); // → купе
wagons[wagons.length - 1] — усули классикии гирифтани унсури охирин: дарозӣ 4, яъне индекси охирин 3. Усули муосир кӯтоҳтар аст: wagons.at(-1). Методи at ададҳои манфиро мефаҳмад: −1 — охирин, −2 — пеш аз охирин.
Унсурро аз рӯи индекс тағйир медиҳем
Ба ҳуҷайра аз рӯи индекс муроҷиат карда, қимати навро таъин мекунем — қимати кӯҳна оддӣ иваз мешавад.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const schedule = ["HTML" , "CSS" , "JavaScript" ];
schedule[1 ] = "Figma" ;
console.log (schedule); // → ["HTML", "Figma", "JavaScript"]
console.log (schedule[5 ]); // → undefined
console.log (schedule[-1 ]); // → undefined
Агар ба индексе муроҷиат кунед, ки вуҷуд надорад, JavaScript хато намедиҳад, балки undefined — «дар ин ҷо чизе нест» — бармегардонад. Диққат диҳед: schedule[-1] низ undefined аст. Индексҳои манфӣ дар қавсайни мураббаъ кор намекунанд — барои ин at(-1) ҳаст.
Намудҳои гуногун дар як массив
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const student = ["Мадина" , 19 , true , null ];
console.log (student); // → ["Мадина", 19, true, null]
console.log (student.length); // → 4
Ин тавр навиштан мумкин аст, аммо дар амал дар як массив одатан додаҳои якнамуд нигоҳ медоранд: танҳо нархҳо, танҳо номҳо, танҳо баҳоҳо. Бо чунин массив кор кардан осонтар аст — ҳамаи унсурҳоро якхела коркард кардан мумкин аст.
const-массивро ба ҳар ҳол тағйир додан мумкин аст
Ин қариб ҳамаро ҳайрон мекунад. const аз нав таъин кардани тағйирёбанда -ро, яъне ба он массиви дигар гузоштанро манъ мекунад. Аммо мазмуни ҳамон массивро тағйир додан мумкин аст.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const cart = ["нон" ];
cart[1 ] = "чой" ;
console.log (cart); // → ["нон", "чой"]
Ин код хато медиҳад · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const cart = ["нон" ];
cart = ["самбуса" ]; // кӯшиш мекунем ба тағйирёбанда массиви дигар гузорем
Монандӣ аз ҳаёт
Ба анбори ашёи шахсӣ бармегардем. Тағйирёбанда худи чизҳоро не, балки калиди ҳуҷайра -ро (барномасозон «истинод» мегӯянд) нигоҳ медорад. const маънои онро дорад: калидро иваз кардан мумкин нест, он ҳамеша аз ҳамин ҳуҷайра аст. Аммо ҳуҷайраро кушода, чизҳоро дар дохил ҷобаҷо кардан — марҳамат.
Гузариш аз массив бо давра
Бештар вақт бо массив бояд барои ҳар як унсур коре кард. Давраи for-ро шумо аллакай медонед — вақте ки индекс лозим аст, он хеле мувофиқ аст.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const grades = [5 , 4 , 5 , 3 ];
for (let i = 0 ; i < grades.length; i++) {
console.log (`Оценка №${i + 1}: ${grades[i]}` );
}
// Мебарорад:
// Оценка №1: 5
// Оценка №2: 4
// Оценка №3: 5
// Оценка №4: 3
Агар индекс лозим набошад, for...of қулайтар аст: дар ҳар қадам ба тағйирёбанда унсури навбатӣ меафтад.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const fruits = ["зардолу" , "гранат" , "черешня" ];
for (const fruit of fruits) {
console.log (`Купить: ${fruit}` );
}
// Мебарорад:
// Купить: зардолу
// Купить: гранат
// Купить: черешня
Оё унсур дар массив ҳаст: includes ва indexOf
Ду методи хурд, вале хеле фоиданок. includes(қимат) бо «ҳа/не» ҷавоб медиҳад, ва indexOf(қимат) индекси мувофиқати аввалро ё -1-ро, агар чизе ёфт нашавад, бармегардонад.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const menu = ["оши палав" , "самбуса" , "курутоб" ];
console.log (menu.includes ("самбуса" )); // → true
console.log (menu.includes ("манту" )); // → false
console.log (menu.indexOf ("курутоб" )); // → 2
console.log (menu.indexOf ("манту" )); // → -1
Хатогиҳои маъмул
1. Аз сарҳад баромадан. arr[arr.length] — ин аллакай пас аз унсури охирин аст, undefined мегирем. Охирин — arr[arr.length - 1].
2. Қадами изофӣ дар давра. Шарти i <= arr.length як қадам зиёдтар мекунад, ва баромади охирин undefined мешавад. Дуруст: i < arr.length.
3. Қавсайн пас аз length. length — хосият аст, на функсия. arr.length() хатои «is not a function» медиҳад. Бе қавсайн менависем: arr.length.
Пеш аз методҳо: мутатсиякунанда ва ғайримутатсиякунанда
Минбаъд дар дарс методҳо бисёр мешаванд — функсияҳои дарунсохт, ки ҳар массив дорад ва тавассути нуқта даъват мешаванд: arr.push(...). Ҳамаи онҳо ба ду гурӯҳ тақсим мешаванд, ва ин тақсимотро ҳамеша дар хотир доштан лозим аст.
Муҳим
Методҳои мутатсиякунанда массиви аслиро тағйир медиҳанд («мутатсия» — тағйирот). Пас аз даъват массиви кӯҳна дар шакли пештара дигар вуҷуд надорад.
Методҳои ғайримутатсиякунанда массиви аслиро даст намезананд: онҳо қимати нав бармегардонанд, ва асл чун пештара мемонад. Дар фронтенд (масалан, дар React) ин махсусан муҳим аст: додаҳо дар экран танҳо он гоҳ дуруст навсозӣ мешаванд, ки мо массиви аслиро вайрон накарда, массиви нав эҷод кунем.
Метод Аслиро тағйир медиҳад? Чӣ бармегардонад pushҲа дарозии нави массивро popҲа унсури охирини ҳазфшударо shiftҲа унсури аввалини ҳазфшударо unshiftҲа дарозии нави массивро spliceҲа массиви унсурҳои ҳазфшударо sortҲа ҳамон массивро (аллакай мураттаб шуда) sliceНе массиви нав — нусхаи қисмро mapНе массиви нав бо ҳамон дарозӣ filterНе массиви нави унсурҳои мувофиқ findНе унсури аввали мувофиқ ё undefined someНе true / falseeveryНе true / falsereduceНе як қимати ниҳоӣ
Ба ин ҷадвал баргардед, вақте ки шубҳа доред. Ҳар методро мо муфассал ҷудо мекунем.
Ишораи ЗС
Агар боварӣ надошта бошед, ки метод чиро бармегардонад, аз ЗС кӯтоҳ ва дақиқ пурсед: «[1, 2, 3].at(-1) чиро бармегардонад ва чаро?» — ва баъд ҳатман ҷавобро бо тугмаи ▶ Иҷро санҷед.
Амалия: мустаҳкам мекунем
Индексҳо, дарозӣ ва давраҳо — пойдевори тамоми дарс. Дар ин ҷо фаҳмед, ва минбаъд осон мешавад.
ВАЗИФАИ 1.1 Рӯйхати харид дар Шоҳмансур осон
Зарина ба бозор меравад. Ба консол баровед: харидии аввал, харидии охирин бо ду усул (тавассути length ва тавассути at) ва сатр бо шумораи харидҳо.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const shopping = ["нон" , "чой" , "шакар" , "зардолу" , "гранат" ];
// 1. харидии аввал
// 2. харидии охирин тавассути length
// 3. харидии охирин тавассути at
// 4. сатри "Всего покупок: ..."
Натиҷаи интизоршаванда нон
гранат
гранат
Всего покупок: 5
Ишора 1 Унсури аввал ҳамеша дар зери индекси 0 аст. Индекси охирин аз дарозӣ як камтар аст.
Ишора 2 Охирин: shopping[shopping.length - ___] ва shopping.at(___). Барои сатр қолаби `Всего покупок: ${___}`-ро истифода баред.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 1.2 Ҷадвали нав миёна
Дар гурӯҳ ҷадвал тағйир ёфт: дарси дар зери индекси 1 истода ба "Figma" иваз шуд. Унсурро аз рӯи индекс иваз кунед, баъд бо давраи for рӯйхати рақамдори дарсҳоро баровед — рақамгузорӣ барои одамон аз 1 оғоз мешавад.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const lessons = ["HTML" , "CSS" , "JavaScript" , "Git" ];
// 1. "CSS"-ро аз рӯи индекс ба "Figma" иваз кунед
// 2. рӯйхатро баровед: "1. HTML", "2. ..." бо давраи for
Натиҷаи интизоршаванда 1. HTML
2. Figma
3. JavaScript
4. Git
Ишора 1 Ивазкунӣ — таъини оддӣ аст: lessons[___] = "Figma".
Ишора 2 Дар давра индекси i аз 0 меравад, ва рақами барои одам — i + 1. Қолаби сатр: `${___}. ${lessons[___]}`.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 1.3 Натиҷаҳои имтиҳон душвор
Омӯзгор балҳои гурӯҳро барои имтиҳон ворид кард. Бо ёрии давраи for...of ҷамъи балҳо, баҳои миёна (то як рақам пас аз вергул бо toFixed(1) мудаввар кунед) ва чанд донишҷӯ 90 ва зиёдтар гирифтаанд, ҳисоб кунед. Сипас тавассути includes санҷед, ки оё дар рӯйхат маҳз 100 бал ҳаст, ва тавассути indexOf — натиҷаи 54 дар кадом индекс истодааст.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const scores = [78 , 92 , 65 , 88 , 100 , 54 , 91 ];
let sum = 0 ;
let excellent = 0 ;
// коди шумо инҷо
Натиҷаи интизоршаванда Сумма: 568
Средний балл: 81.1
Отличников (90+): 3
Есть 100 баллов: true
Позиция 54: 5
Ишора 1 Дар давра дар ҳар қадам балро ба sum илова кунед, ва агар бал на камтар аз 90 бошад — excellent-ро ба 1 зиёд кунед. Баҳои миёна = ҷамъ / шумораи унсурҳо.
Ишора 2 Чорчӯба: for (const score of scores) { sum += ___; if (___ >= 90) ___++; }. Миёна: (sum / scores.___).toFixed(1).
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
02 push ва pop: дар охир илова кардан ва гирифтан
Амалҳои аз ҳама маъмули рӯйхат — чизеро ба охир гузоштан ва охиринро гирифтан. Корбар молро ба сабад илова кард — push. «Амали охиринро бекор кун»-ро пахш кард — pop.
Монандӣ аз ҳаёт
Дастаи нонҳои гарм дар нонвойхона. Нонвой нони навро боло мегузорад — ин push аст. Харидор низ аз боло мегирад — охирин гузошташударо. Ин pop аст. Охири массив — боло-и даста аст.
push — ба охир илова кардан
arr.push(унсури1, унсури2, …) Бармегардонад: дарозии навро Массиви аслиро тағйир медиҳад
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const stack = ["нон" , "нон" ];
const newLength = stack.push ("нон с кунжутом" );
console.log (newLength); // → 3
console.log (stack); // → ["нон", "нон", "нон с кунжутом"]
stack.push ("патыр" , "фатир" ); // якбора якчандро илова кардан мумкин аст
console.log (stack.length); // → 5
→ push("нон с кунжутом") →
Унсури нав ба охир меистад ва индекси баробар ба дарозии кӯҳна мегирад.
pop — охиринро гирифтан
arr.pop() Бармегардонад: унсури ҳазфшударо Массиви аслиро тағйир медиҳад
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const orders = ["самбуса" , "курутоб" , "шакароб" ];
const last = orders.pop ();
console.log (last); // → шакароб
console.log (orders); // → ["самбуса", "курутоб"]
const empty = [];
console.log (empty.pop ()); // → undefined
pop() чизеро қабул намекунад: он ҳамеша унсури охиринро мебарорад ва онро ба мо медиҳад.
Аз массиви холӣ pop() undefined бармегардонад — хато намешавад, танҳо гирифтан чизе нест.
Хатои маъмул
Гумон кардан, ки push массивро бармегардонад. Он адад — дарозии навро бармегардонад. Бинобар ин ин тавр навиштан мумкин нест:
Ин бад аст Дар cart адад мемонад, на массив.
Чӣ тавр НАБОЯД кард
let cart = ["нон" ];
cart = cart.push ("чой" );
console.log (cart); // 2 — массив гум шуд!
Ин хуб аст Оддӣ методро даъват мекунем — массив худ тағйир меёбад.
JavaScript
const cart = ["нон" ];
cart.push ("чой" );
console.log (cart); // ["нон", "чой"]
Маслиҳат: shift ва unshift — ҳамон чиз, аммо дар оғоз
Агар даста — push/pop бошад, пас навбат — кор бо оғоз аст. Дар навбати бонк ё маршрутка аввал касеро хизмат мекунанд, ки аввал омадааст: shift() унсури аввалро мебарорад ва онро бармегардонад. Ва unshift(унсур) унсурро ба худи оғоз мегузорад (масалан, шахси солхӯрдаро пеш мегузаронем) ва дарозии навро бармегардонад.
arr.shift() Бармегардонад: аввалини ҳазфшударо Массиви аслиро тағйир медиҳад
arr.unshift(унсур) Бармегардонад: дарозии навро Массиви аслиро тағйир медиҳад
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const queue = ["Фарход" , "Мадина" , "Рустам" ];
const first = queue.shift ();
console.log (first); // → Фарход
console.log (queue); // → ["Мадина", "Рустам"]
const len = queue.unshift ("Абдулло-ака" );
console.log (len); // → 3
console.log (queue); // → ["Абдулло-ака", "Мадина", "Рустам"]
Пас аз shift ва unshift индекси ҳамаи унсурҳои боқимонда тағйир меёбад: ҳар кадом як ҷой мегузарад. Инро дар хотир доред, агар индексро пешакӣ ба тағйирёбанда нигоҳ дошта бошед.
Метод Дар куҷо кор мекунад Чӣ мекунад Бармегардонад push(x)охир илова мекунад дарозии навро pop()охир нест мекунад унсури гирифташударо unshift(x)оғоз илова мекунад дарозии навро shift()оғоз нест мекунад унсури гирифташударо
Амалия: мустаҳкам мекунем
Даста ва навбат дар барномаҳо пайваста вомехӯранд: таърихи амалҳо, рӯйхати огоҳиҳо, навбати фармоишҳо.
ВАЗИФАИ 2.1 Дастаи нонҳо осон
Нонвой ба даста боз ду нон мегузорад: "нон 3" ва "нон 4" — бо як даъвати push. Он чиро, ки push баргардонд, нигоҳ доред ва сатрро бо миқдор баровед. Сипас харидор нони болоиро мегирад: онро тавассути pop гиред, чиро гирифтаро баровед ва худи дастаро.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const stack = ["нон 1" , "нон 2" ];
// коди шумо инҷо
Натиҷаи интизоршаванда Лепёшек в стопке: 4
Взяли: нон 4
["нон 1", "нон 2", "нон 3"]
Ишора 1 push дарозии навро бармегардонад — ин маҳз миқдори нонҳост. pop унсури гирифташударо бармегардонад.
Ишора 2 const count = stack.push(___, ___); ва const taken = stack.___(); — минбаъд ду console.log бо сатрҳои қолабӣ ва яктоаш бо stack.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 2.2 Навбат дар бонк миёна
Дар шӯъбаи бонк дар хиёбони Рӯдакӣ навбат ҳаст. Бо тартиб иҷро кунед: якумро хизмат кунед (Обслужили: ...-ро баровед), ба охир Зарина меистад, ва пеш аз ҳама Абдуллоака-и солхӯрдаро мегузаронем. Дар охир навбат ва сатр бо дарозии онро баровед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const queue = ["Фарход" , "Мадина" , "Рустам" ];
// коди шумо инҷо
Натиҷаи интизоршаванда Обслужили: Фарход
["Абдулло-ака", "Мадина", "Рустам", "Зарина"]
В очереди: 4
Ишора 1 Якумро shift мебарорад, ба охир push илова мекунад, ба оғоз — unshift.
Ишора 2 Тартиб муҳим аст: аввал const served = queue.shift(), баъд queue.push(___), баъд queue.unshift(___). Дарозӣ — queue.___.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 2.3 Тугмаи «Бекор кардан» душвор
Дар мағозаи интернетӣ таърихи амалҳои корбар нигоҳ дошта мешавад. Функсияи undo(history)-ро нависед: он амали охиринро мебарорад ва сатри Отменено: ...-ро бармегардонад . Агар таърих холӣ бошад, функсия Нечего отменять-ро бармегардонад. Онро 4 бор даъват кунед ва натиҷаҳоро баровед, ва дар охир худи таърихро баровед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const history = ["ввёл имя" , "выбрал город" , "нажал «Купить»" ];
function undo (list) {
// коди шумо инҷо
}
console.log (undo (history));
console.log (undo (history));
console.log (undo (history));
console.log (undo (history));
console.log (history);
Натиҷаи интизоршаванда Отменено: нажал «Купить»
Отменено: выбрал город
Отменено: ввёл имя
Нечего отменять
[]
Ишора 1 Аввал санҷед, ки массив холӣ аст ё не: дарозии массиви холӣ ба 0 баробар аст. Танҳо агар чизе барои бекор кардан бошад — pop-ро даъват кунед.
Ишора 2 if (list.length === ___) return "Нечего отменять"; баъд const action = list.___(); ва return `Отменено: ${___}`;
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
03 splice: дар миёна нест кардан, ҷобаҷо кардан, иваз кардан
push ва pop танҳо бо охир кор мекунанд. Пас агар бояд истгоҳро аз миёнаи маршрут бардорем ё дарси навро байни ду дарси дигар гузорем-чӣ? Барои ин методи универсалии splice — «корди швейтсарӣ»-и массивҳо ҳаст.
Монандӣ аз ҳаёт
Қатор дар истгоҳ истодааст. Коргар дар ҳар ҷои таркиб метавонад якчанд вагонро ҷудо кунад ва ба ҷойи онҳо навҳоро пайваст намояд . Ба ӯ се чизро гуфтан лозим аст: аз кадом вагон оғоз кунад, чандторо ҷудо кунад ва кадом вагонҳоро ба ҷойи онҳо пайваст кунад. Маҳз ҳамин се чизро splice мегирад.
arr.splice(start, deleteCount, ...items) Бармегардонад: массиви ҳазфшудагонро Массиви аслиро тағйир медиҳад
start индекс, ки аз он оғоз мекунем. Метавонад манфӣ бошад: −1 — унсури охирин.
deleteCount чанд унсурро нест кардан, аз start оғоз карда. Агар 0 бошад — чизеро нест намекунем.
...items унсурҳои ғайриҳатмӣ, ки ба ҷойи start ҷобаҷо мешаванд. Се нуқта маънои «ҳар қадар дона бо вергул»-ро дорад.
1. Нест кардан
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const stops = ["Вокзал" , "Зелёный базар" , "Шохмансур" , "Цирк" , "Корвон" ];
const removed = stops.splice (1 , 2 );
console.log (removed); // → ["Зелёный базар", "Шохмансур"]
console.log (stops); // → ["Вокзал", "Цирк", "Корвон"]
Ба индекси 1 меистем — ин «Зелёный базар» аст.
2 унсурро нест мекунем : «Зелёный базар» ва «Шохмансур».
Чизе ҷобаҷо кардан лозим нест — аргументи сеюм нест. Унсурҳои боқимонда ба чап мегузаранд.
Массиви ҳазфшудагон бармегардад — онро нигоҳ доштан ё оддӣ истифода набурдан мумкин аст.
Пас аз нест кардан «Цирк» ва «Корвон» индексҳои нав гирифтанд.
2. Ҷобаҷо кардан (deleteCount = 0)
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const lessons = ["HTML" , "CSS" , "JavaScript" ];
lessons.splice (2 , 0 , "Figma" , "Git" );
console.log (lessons); // → ["HTML", "CSS", "Figma", "Git", "JavaScript"]
Ба индекси 2 меистем, 0 унсурро нест мекунем ва ду унсури навро ҷобаҷо мекунем. Ҳар чизе, ки аз индекси 2 ва минбаъд меистод, ба рост мегузарад.
3. Иваз кардан (ҳамзамон нест ва ҷобаҷо кардан)
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const menu = ["самбуса" , "манту" , "курутоб" ];
const old = menu.splice (1 , 1 , "оши палав" );
console.log (old); // → ["манту"]
console.log (menu); // → ["самбуса", "оши палав", "курутоб"]
start-и манфӣ
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const fruits = ["зардолу" , "гранат" , "дыня" , "виноград" ];
fruits.splice (-2 , 1 ); // ба дуюм аз охир меистем — "дыня"
console.log (fruits); // → ["зардолу", "гранат", "виноград"]
Қапқон: deleteCount-ро фаромӯш кардед
Агар танҳо start-ро нишон диҳед, splice ҳама чизро аз start то охир нест мекунад.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const cities = ["Душанбе" , "Худжанд" , "Бохтар" , "Куляб" ];
const cut = cities.splice (1 );
console.log (cities); // → ["Душанбе"]
console.log (cut); // → ["Худжанд", "Бохтар", "Куляб"]
Хатои маъмул
Интизор шудан, ки splice массиви навро бе унсурҳои ҳазфшуда бармегардонад. Не: он ҳазфшудагон -ро бармегардонад, ва тағйирёбанда худи массиви аслӣ мешавад. Агар const result = arr.splice(0, 1) нависед, дар result массиве аз як унсури ҳазфшуда мешавад.
Амалия: мустаҳкам мекунем
Асосии splice — равшан ҷавоб додан ба се савол: аз куҷо, чандто нест кардан, чиро ҷобаҷо кардан.
ВАЗИФАИ 3.1 Истгоҳ дар таъмир осон
Истгоҳи «Цирк» барои таъмир баста шуд, ва маршрутка онро мегузарад. Онро тавассути splice аз маршрут нест кунед. Массиви ҳазфшудагон ва маршрути навсозишударо баровед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const stops = ["Вокзал" , "Зелёный базар" , "Шохмансур" , "Цирк" , "Корвон" ];
// коди шумо инҷо
Натиҷаи интизоршаванда ["Цирк"]
["Вокзал", "Зелёный базар", "Шохмансур", "Корвон"]
Ишора 1 Аввал индекси «Цирк»-ро ёбед — бо даст ҳисоб кунед ё тавассути indexOf.
Ишора 2 const removed = stops.splice(___, 1); — як унсурро нест мекунем.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 3.2 Дастури палав миёна
Рустам маҳсулоти оши палавро навишт, аммо гӯштро фаромӯш кард. Бо ду даъвати splice: 1) "мясо"-ро фавран пас аз "морковь" ҷобаҷо кунед, чизеро нест накарда; 2) "масло"-ро ба "зира" иваз кунед. Массив ва дарозии онро баровед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const plov = ["рис" , "морковь" , "лук" , "масло" ];
// коди шумо инҷо
Натиҷаи интизоршаванда ["рис", "морковь", "мясо", "лук", "зира"]
5
Ишора 1 Ҷобаҷокунӣ — ин deleteCount = 0 аст. Ивазкунӣ — deleteCount = 1 илова унсури нав. Пас аз ҷобаҷокунӣ индекси «масло» тағйир ёфт — онро аз нав санҷед.
Ишора 2 plov.splice(2, ___, "мясо"); баъд plov.splice(plov.indexOf("масло"), ___, ___);
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 3.3 Ҷойивазкунӣ дар маршрут душвор
Шаҳром сафарро аз рӯи шаҳрҳо ба нақша гирифта истодааст ва мехоҳад тартиби онҳоро иваз кунад. Функсияи moveItem(arr, from, to)-ро нависед, ки унсурро аз индекси from мебарорад ва ба индекси to ҷобаҷо мекунад (массиви аслиро тағйир дода). Танҳо splice-ро — ду бор — истифода баред.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const route = ["Душанбе" , "Хорог" , "Куляб" , "Бохтар" ];
function moveItem (arr, from, to) {
// коди шумо инҷо
}
moveItem (route, 1 , 3 );
console.log (route);
moveItem (route, 2 , 0 );
console.log (route);
Натиҷаи интизоршаванда ["Душанбе", "Куляб", "Бохтар", "Хорог"]
["Бохтар", "Душанбе", "Куляб", "Хорог"]
Ишора 1 splice-и якум як унсурро нест мекунад ва аз он массив бармегардонад. Худи унсур — унсури сифрум-и ин массив аст.
Ишора 2 const item = arr.splice(from, 1)[___]; баъд arr.splice(to, ___, item);
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
04 slice: як қисми массивро нусха бардоштан
slice («бурида, порча») як қисми массивро мегирад ва онро ҳамчун массиви нав бармегардонад. Массиви аслӣ дар ин ҳолат тамоман тағйир намеёбад. Ин яке аз бехатартарин методҳост.
Монандӣ аз ҳаёт
Ба шумо се саҳифа аз китоби дарсӣ лозиманд. Шумо онҳоро намекашед, балки нусхабардорӣ (ксерокс) мекунед. Дар дасти шумо варақҳои нав ҳастанд, ва китоби дарсӣ бутун мондааст. slice — нусхабардорӣ аст, ва splice аз мавзӯи гузашта — қайчӣ.
arr.slice(start, end) Бармегардонад: массиви нав Аслиро тағйир намедиҳад
Охир дохил намешавад
Муҳимтарин қоида: унсури дорои индекси end ба натиҷа намеафтад . slice(1, 4) индексҳои 1, 2 ва 3-ро мегирад — «аз 1 то 4, аммо 4-ро даст намезанем».
days.slice(1, 4) → ["Вт", "Ср", "Чт"]. Индекси 4 — «хати истгоҳ» аст, худи он гирифта намешавад. Дарозии натиҷа = end − start = 3.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const days = ["Пн" , "Вт" , "Ср" , "Чт" , "Пт" , "Сб" ];
console.log (days.slice (1 , 4 )); // → ["Вт", "Ср", "Чт"]
console.log (days.slice (3 )); // → ["Чт", "Пт", "Сб"]
console.log (days.slice (-2 )); // → ["Пт", "Сб"]
console.log (days.slice (0 , -1 )); // → ["Пн", "Вт", "Ср", "Чт", "Пт"]
console.log (days); // → ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб"]
slice(3) — бе end ҳамаро аз индекси 3 то охир мегирем.
slice(-2) — индекси манфӣ аз охир ҳисоб мешавад: ду унсури охирин.
slice(0, -1) — ҳама ғайр аз охирин: хати истгоҳ дар унсури охирин.
Сатри охирин нишон медиҳад, ки days мисли пештара монд.
Нусхаи пурра: slice() бе аргументҳо
Баъзан нусхаи пурраи массив лозим аст, то онро тағйир диҳем ва аслро даст назанем. Барои ин — slice() бе аргументҳо ё навишти [...arr] (се нуқта унсурҳоро ба қавсайни нав «паҳн мекунанд»).
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const original = ["нон" , "чой" ];
const copy1 = original.slice ();
const copy2 = [... original];
copy1.push ("самбуса" );
copy2.push ("курутоб" );
console.log (original); // → ["нон", "чой"]
console.log (copy1); // → ["нон", "чой", "самбуса"]
console.log (copy2); // → ["нон", "чой", "курутоб"]
Хатои маъмул: ин нусха нест
const copy = original; массиви нав эҷод намекунад. Шумо танҳо калиди дуюми ҳамон ҳуҷайраи анбори ашёи шахсӣ сохтед. copy-ро тағйир медиҳед — original низ тағйир меёбад.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const original = ["Фарход" , "Мадина" ];
const notCopy = original; // ин ҳамон истинод аст
notCopy.push ("Рустам" );
console.log (original); // → ["Фарход", "Мадина", "Рустам"]
splice ё slice? Омехтагии классикӣ
Номҳо ба як ҳарф фарқ мекунанд, ва рафтор — тамоман. Дар хотир доред: дар sp lice «sp» ҳаст — мисли калимаи sp oil (вайрон кардан): аслро вайрон мекунад.
splice(start, deleteCount, ...items)slice(start, end)Массиви аслӣ тағйир медиҳад даст намезанад Аргументи дуюм чандто нест карданто кадом индекс (бе дохил кардан)Бармегардонад массиви ҳазфшудагон массиви нав — нусхаи қисм Ҷобаҷо карда метавонад ҳа не Монандӣ қайчӣ нусхабардорӣ
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const a = [10 , 20 , 30 , 40 , 50 ];
const b = [10 , 20 , 30 , 40 , 50 ];
console.log (a.slice (1 , 3 )); // → [20, 30]
console.log (b.splice (1 , 3 )); // → [20, 30, 40]
console.log (a); // → [10, 20, 30, 40, 50]
console.log (b); // → [10, 50]
Амалия: мустаҳкам мекунем
slice дар фронтенд зуд-зуд лозим мешавад: 5 маҳсулоти аввалро нишон додан, рӯйхатро ба саҳифаҳо тақсим кардан, нусхаи бехатар сохтан.
ВАЗИФАИ 4.1 Ҳафтаи гарм дар Душанбе осон
Ҳароратҳои рӯзона барои як ҳафтаи июл дода шудаанд. Тавассути slice ҳароратҳои се рӯзи аввал ва ду рӯзи охирро (тавассути индекси манфӣ) гиред. Дар охир массиви аслиро баровед, то боварӣ ҳосил кунед, ки он тағйир наёфтааст.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const temps = [38 , 40 , 41 , 39 , 37 , 36 , 42 ];
// коди шумо инҷо
Натиҷаи интизоршаванда [38, 40, 41]
[36, 42]
[38, 40, 41, 39, 37, 36, 42]
Ишора 1 Се рӯзи аввал — индексҳои 0, 1, 2. Яъне хати истгоҳ дар индекси 3 аст.
Ишора 2 temps.slice(0, ___) ва temps.slice(___) бо адади манфӣ.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 4.2 Саҳифаҳои меню миёна
Дар сайти чойхона меню дар ҳар саҳифа 3 таомӣ нишон дода мешавад. Функсияи getPage(list, page)-ро нависед, ки таомҳои саҳифаи лозимиро бармегардонад (саҳифаҳо аз 1 рақамгузорӣ мешаванд). Саҳифаҳои 1, 2, 3 ва 4-ро баровед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const menu = ["самбуса" , "курутоб" , "оши палав" , "шакароб" , "манту" , "лагман" , "чой" , "нон" ];
const perPage = 3 ;
function getPage (list, page) {
// коди шумо инҷо
}
console.log (getPage (menu, 1 ));
console.log (getPage (menu, 2 ));
console.log (getPage (menu, 3 ));
console.log (getPage (menu, 4 ));
Натиҷаи интизоршаванда ["самбуса", "курутоб", "оши палав"]
["шакароб", "манту", "лагман"]
["чой", "нон"]
[]
Ишора 1 Саҳифаи 1 — индексҳои 0–2, саҳифаи 2 — индексҳои 3–5. Ёбед, ки оғози саҳифа ба рақами он чӣ тавр вобаста аст. slice эътироз намекунад, агар end аз дарозӣ зиёд бошад.
Ишора 2 Оғоз: (page - 1) * ___, охир: page * ___. list.slice(start, end)-ро баргардонед.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 4.3 «…и ещё 2» душвор
Дар зери постҳои шабакаи иҷтимоӣ на ҳамаи онҳоеро, ки лайк мондаанд, балки якчанди аввалро ва навиштаи «…и ещё N»-ро нишон медиҳанд. Функсияи shorten(list, n)-ро нависед: он массиви нав -ро аз n номи аввал бармегардонад, ва агар номҳо аз n зиёд бошанд, ба охир сатри …и ещё X-ро илова мекунад. Массиви аслӣ набояд тағйир ёбад.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const likes = ["Фарход" , "Мадина" , "Рустам" , "Зарина" , "Шахром" ];
function shorten (list, n) {
// коди шумо инҷо
}
console.log (shorten (likes, 3 ));
console.log (shorten (likes, 10 ));
console.log (likes);
Натиҷаи интизоршаванда ["Фарход", "Мадина", "Рустам", "…и ещё 2"]
["Фарход", "Мадина", "Рустам", "Зарина", "Шахром"]
["Фарход", "Мадина", "Рустам", "Зарина", "Шахром"]
Ишора 1 Аввал нусхаи n унсури аввалро тавассути slice созед. Ба ин нусха бепарво push кардан мумкин аст — асл осеб намебинад.
Ишора 2 const result = list.slice(0, ___); Чанд монд: list.length - ___. Агар ин адад аз сифр зиёд бошад — result.push(`…и ещё ${___}`).
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
05 Callback ва map: ҳар унсурро табдил додан
Минбаъд методҳое меоянд, ки функсия -ро мегиранд. Ин ғояи калидии тамоми дарс аст, бинобар ин онро хеле бодиққат ҷудо мекунем.
Callback чист
Callback (аз англисии callback — «даъвати баръакс») — функсияест, ки мо онро ба метод медиҳем, ва он худаш онро барои ҳар унсур даъват мекунад. Мо давра наменависем — давра аллакай дар дохили метод пинҳон аст. Мо танҳо шарҳ медиҳем, ки бо як унсур чӣ кор кардан лозим .
Монандӣ аз ҳаёт
Шумо ба бофандаи корхонаи Хуҷанд халтаи пахта ва дастур медиҳед: «аз ҳар тӯда ришта кун». Шумо дар паҳлӯяш намеистед ва ҳар ҳаракатро фармон намедиҳед — ӯ худаш тӯдаҳоро як-як мегирад ва барои ҳар кадом дастури шуморо иҷро мекунад. Дастур — callback аст, бофанда — метод.
То ки callback ҷодугарӣ ба назар нарасад, «метод»-и хурди худамонро бо давраи шинос менависем. Маҳз ҳамин тавр map дар дохил сохта шудааст:
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
function myMap (list, callback) {
const result = [];
for (const item of list) {
result.push (callback (item)); // функсияи ШУМОРО барои ҳар унсур даъват мекунем
}
return result;
}
const double = (n) => n * 2 ;
console.log (myMap ([4 , 7 , 10 ], double)); // → [8, 14, 20]
Қайд кунед: мо double-ро бе қавсайн додем. Бо қавсайни double() мо худамон функсияро даъват карда, натиҷаашро медодем. Ва ба мо худи функсияро додан лозим аст, то метод онро даъват кунад.
map — усули дарунсохт
arr.map((element, index, array) => қиматиНав) Бармегардонад: массиви нав бо ҳамон дарозӣ Аслиро тағйир намедиҳад
map («акс кардан, мувофиқ гузоштан») аз болои ҳар унсур мегузарад, callback-ро даъват мекунад ва он чиро, ки callback баргардонд , ба массиви нав мегузорад. Унсурҳо чӣ қадар буданд — ҳамон қадар мемонанд.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const pricesKg = [18 , 25 , 12 ];
const pricesTwoKg = pricesKg.map ((price) => price * 2 );
console.log (pricesTwoKg); // → [36, 50, 24]
console.log (pricesKg); // → [18, 25, 12]
Ин чӣ тавр иҷро мешавад, қадам ба қадам
Қадам Унсури price Callback ҳисоб мекунад Натиҷа ба массиви нав гузошта мешавад 1 1818 * 2[36]2 2525 * 2[36, 50]3 1212 * 2[36, 50, 24]
Параметрҳои callback: element, index, array
Метод ба callback на танҳо унсурро медиҳад. Ҳамчун аргументи дуюм индекс , ҳамчун сеюм — тамоми массив меояд. Одатан танҳо якум лозим аст, баъзан — якум ва дуюм. Номҳоро ҳар гуна додан мумкин аст, тартиб муҳим аст.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const guests = ["Нилуфар" , "Далер" , "Сабрина" ];
const numbered = guests.map ((name, index) => `${index + 1}. ${name}` );
console.log (numbered); // → ["1. Нилуфар", "2. Далер", "3. Сабрина"]
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const cities = ["душанбе" , "худжанд" , "хорог" ];
const titles = cities.map ((city) => city[0 ].toUpperCase () + city.slice (1 ));
console.log (titles); // → ["Душанбе", "Худжанд", "Хорог"]
Дар мисоли дуюм callback ҳарфи аввалро мегирад (city[0]), онро калон мекунад (toUpperCase()) ва боқимондаи сатрро мечаспонад (slice(1) дар сатрҳо низ кор мекунад). Ин вазифаи маъмули фронтенд аст: додаҳоро пеш аз нишон додан ба шакли зебо овардан.
Хатои маъмул: return дар қавсайни фигурӣ фаромӯш шуд
Функсияи тирдор бе қавсайни фигурӣ натиҷаро худаш бармегардонад. Аммо бо қавсайни фигурӣ бояд return-ро ошкоро навишт — вагарна функсия undefined бармегардонад, ва тамоми массиви нав аз undefined иборат мешавад.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const prices = [10 , 20 , 30 ];
const wrong = prices.map ((p) => { p * 2 });
console.log (wrong); // → [undefined, undefined, undefined]
const right = prices.map ((p) => { return p * 2 ; });
console.log (right); // → [20, 40, 60]
const short = prices.map ((p) => p * 2 );
console.log (short); // → [20, 40, 60]
Хатои маъмул: map барои амалҳои иловагӣ
map вақте лозим аст, ки ба шумо массиви нав лозим бошад. Агар шумо оддӣ мехоҳед ҳар унсурро ба консол барорӣ ва натиҷаро истифода намебаред, for...of-ро (ё методи forEach — он ҳамин корро мекунад, аммо чизеро бармегардонад) гиред.
Ин бад аст Массиви нолозим аз undefined эҷод мешавад.
Чӣ тавр НАБОЯД кард
names.map ((name) => console.log (name));
Ин хуб аст Давра ростқавлона мегӯяд: «оддӣ аз рӯйхат гузар».
JavaScript
for (const name of names) {
console.log (name);
}
Ишораи ЗС
Агар callback нофаҳмо ба назар расад, аз ЗС хоҳиш кунед: «Дар ҷадвал нависед, ки дар ҳар қадами [3, 5, 8].map(n => n * 10) чӣ рӯй медиҳад: кадом унсур меояд ва чӣ бармегардад». Ҷадвали қадам ба қадам қариб ҳамаи саволҳоро бартараф мекунад.
Амалия: мустаҳкам мекунем
Қоида барои map: дар вуруд N унсур — дар хуруҷ N унсур, ҳар кадом бо callback табдил ёфтааст.
ВАЗИФАИ 5.1 Зардолу бо тарозу осон
Зардолу дар бозор барои як килограмм 18 сомонӣ меарзад. Харидорон миқдори гуногуни килограмм гирифтанд. Тавассути map массиви арзиши ҳар харидро гиред.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const kg = [2 , 5 , 1 , 3 ];
const pricePerKg = 18 ;
// const costs = ...
// console.log(costs);
Натиҷаи интизоршаванда [36, 90, 18, 54]
Ишора 1 Callback миқдори килограммро мегирад ва бояд арзишро баргардонад.
Ишора 2 const costs = kg.map((weight) => ___ * ___);
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 5.2 Рӯйхат барои саҳифа миёна
Дар фронтенд map пайваста додаҳоро ба ҳамбандии HTML табдил медиҳад. Массиви номҳоро ба массиви сатрҳои намуди <li>1. Нилуфар</li> табдил диҳед — бо рақаме, ки аз 1 оғоз мешавад.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const guests = ["Нилуфар" , "Далер" , "Сабрина" ];
// const items = ...
// console.log(items);
Натиҷаи интизоршаванда ["<li>1. Нилуфар</li>", "<li>2. Далер</li>", "<li>3. Сабрина</li>"]
Ишора 1 Рақам аз параметри дуюми callback — индекс гирифта мешавад. Фаромӯш накунед, ки 1 илова кунед.
Ишора 2 guests.map((name, i) => `<li>${___}. ${___}</li>`)
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 5.3 Даромад аз ҷамъоварии пахта душвор
Далер 5 рӯз пахта чид. Барои ҳар килограмм 1.5 сомонӣ медиҳанд, ва агар дар як рӯз 110 кг ва бештар ҷамъ шуда бошад — боз бонуси 20 сомонӣ. Тавассути map массиви даромадро аз рӯи рӯзҳо гиред ва онро баровед. Сипас бо map-и дуюм сатрҳои День 1: 200 сомони-ро гиред ва ҳар якашро бо сатри алоҳида тавассути for...of баровед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const harvest = [120 , 95 , 140 , 80 , 110 ];
// коди шумо инҷо
Натиҷаи интизоршаванда [200, 142.5, 230, 120, 185]
День 1: 200 сомони
День 2: 142.5 сомони
День 3: 230 сомони
День 4: 120 сомони
День 5: 185 сомони
Ишора 1 Дар callback шарт лозим аст, бинобар ин қавсайни фигурӣ қулайтар аст: маблағи асосиро ҳисоб кунед, дар сурати зарурат бонусро илова намоед ва return-ро фаромӯш накунед.
Ишора 2 (kg) => { let pay = kg * ___; if (kg >= ___) pay += ___; return pay; }. Барои сатрҳо индексро истифода баред: (pay, i) => `День ${i + 1}: ...`.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
06 filter: танҳо мувофиқҳоро мондан
filter («филтр, элак») аз болои массив мегузарад ва танҳо он унсурҳоро мемонад, ки callback барояшон true ҷавоб дод. Дар фронтенд ин ҷустуҷӯ, филтрҳо дар феҳрист, ҷадвалчаҳои «Ҳама / Нахондашуда» аст.
Монандӣ аз ҳаёт
Шумо пеш аз фурӯш гелосро ҷудо мекунед: ҳар донаро мебинед ва қарор медиҳед — «ба қуттӣ» ё «не». Қарори шумо «ҳа/не» — callback аст. Қуттии бо донаҳои интихобшуда — массиви нав. Тӯдаи аслии гелос ҷое нарафтааст.
arr.filter((element, index, array) => true ё false) Бармегардонад: массиви нав (метавонад холӣ бошад) Аслиро тағйир намедиҳад
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const prices = [12 , 45 , 8 , 120 , 30 ];
const cheap = prices.filter ((price) => price < 40 );
console.log (cheap); // → [12, 8, 30]
console.log (prices); // → [12, 45, 8, 120, 30]
Унсур price < 40Ба натиҷа меафтад? 12trueҳа 45falseне 8trueҳа 120falseне 30trueҳа
Бар хилофи map, дарозии натиҷа метавонад ҳар чӣ бошад: аз сифр то дарозии массиви аслӣ. Худи унсурҳоро filter тағйир намедиҳад — танҳо қарор медиҳад, ки онҳоро монад ё не.
Натиҷаи холӣ ва ҳисоб тавассути length
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const scores = [55 , 72 , 91 , 64 , 98 ];
const failed = scores.filter ((s) => s < 50 );
console.log (failed); // → []
console.log (failed.length); // → 0
const top = scores.filter ((s) => s >= 90 ).length;
console.log (`Отличников: ${top}` ); // → Отличников: 2
Агар касе мувофиқ наояд, мо массиви холии []-ро мегирем, на хаторо. Ва пайвастаи filter(...).length — осонтарин роҳи ҳисоб кардани он аст, ки чанд унсур ба шарт мувофиқ аст.
Сатрҳоро филтр мекунем
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const cities = ["Душанбе" , "Хорог" , "Худжанд" , "Куляб" , "Бохтар" ];
const long = cities.filter ((city) => city.length > 5 );
console.log (long); // → ["Душанбе", "Худжанд", "Бохтар"]
const onH = cities.filter ((city) => city.startsWith ("Х" ));
console.log (onH); // → ["Хорог", "Худжанд"]
startsWith("Х") — методи сатр: «оё сатр бо ин ҳарф оғоз мешавад?». true ё false бармегардонад, бинобар ин барои callback-и филтр комилан мувофиқ аст.
Мини-пешнамоиш: объект
Дар додаҳои воқеӣ мол на танҳо нарх, балки маҷмӯаи маълумот аст: ном, нарх, мавҷудият. Барои ин дар JavaScript объект ҳаст — қавсайни фигурӣ бо ҷуфтҳои «калид: қимат», масалан { name: "Нон", price: 4 }. Барои гирифтани қимат номи объект, нуқта ва калидро менависанд: агар item чунин объект бошад, пас item.price ба 4 баробар аст, ва item.name — "Нон".
Объектҳоро мо дар дарси оянда муфассал ҷудо мекунем, ҳоло ин барои хондани мисолҳои зер кифоя аст.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const products = [
{ name: "Нон" , price: 4 },
{ name: "Чой кабуд" , price: 25 },
{ name: "Самбуса" , price: 6 },
];
const affordable = products.filter ((item) => item.price <= 10 );
console.log (affordable); // → [{ name: "Нон", price: 4 }, { name: "Самбуса", price: 6 }]
Хатогиҳои маъмул
1. return дар қавсайни фигурӣ фаромӯш шуд. Callback undefined бармегардонад, ва ин «не» ҳисоб мешавад — натиҷа холии [] мешавад.
2. Як унсурро интизоранд, ва массив мегиранд. filter ҳамеша массив бармегардонад, ҳатто агар як унсур мувофиқ омада бошад: ["Хорог"], на "Хорог". Агар як унсур лозим бошад — find ҳаст, дар бораи он дар мавзӯи оянда.
Амалия: мустаҳкам мекунем
Callback-и филтр — саволест, ки ба он «ҳа» ё «не» ҷавоб додан мумкин аст.
ВАЗИФАИ 6.1 Голҳои «Истиқлол» осон
Голҳои «Истиқлол» дар бозиҳои охирин дода шудаанд. Массиви бозиҳоеро гиред, ки дастаи 2 гол ва зиёдтар задааст, ва баровед, ки чунин бозиҳо чандто ҳастанд.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const goals = [3 , 0 , 2 , 1 , 4 , 0 , 2 ];
// коди шумо инҷо
Натиҷаи интизоршаванда [3, 2, 4, 2]
Результативных матчей: 4
Ишора 1 Шарти «2 ва зиёдтар» чун >= 2 навишта мешавад.
Ишора 2 const good = goals.filter((g) => ___); миқдор — good.___.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 6.2 Шаҳрҳо барои экскурсия миёна
Рӯйхати шаҳрҳои Тоҷикистон ҳаст. Ду массив гиред: 1) шаҳрҳое, ки дар номашон зиёда аз 7 ҳарф ҳаст; 2) шаҳрҳое, ки бо ҳарфи «Х» оғоз мешаванд. Ҳардуро баровед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const cities = ["Душанбе" , "Худжанд" , "Бохтар" , "Куляб" , "Хорог" , "Истаравшан" , "Пенджикент" , "Турсунзаде" ];
// коди шумо инҷо
Натиҷаи интизоршаванда ["Истаравшан", "Пенджикент", "Турсунзаде"]
["Худжанд", "Хорог"]
Ишора 1 Дарозии сатр — city.length, мисли массив. «Зиёда аз 7» — ин > 7 аст, на >= 7.
Ишора 2 Барои массиви дуюм city.startsWith(___) ё санҷиши ҳарфи аввал city[0] === ___ мувофиқ аст.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 6.3 Такрорҳоро бардоштан душвор
Ба сабади барномаи расонидан номҳои такроршаванда афтоданд. Тавассути filter массивро бе такрор гиред (ҳар ном — як маротиба, бо тартиби аввалин пайдошавӣ). Сипас баровед, ки чанд такрор нест карда шуд.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const cart = ["нон" , "чой" , "нон" , "самбуса" , "чой" , "нон" ];
// коди шумо инҷо
Натиҷаи интизоршаванда ["нон", "чой", "самбуса"]
Удалено повторов: 3
Ишора 1 Унсур бори аввал вомехӯрад, агар indexOf-и ин унсур (он мувофиқати аввал -ро меҷӯяд) ба индекси ҷорӣ баробар бошад. Индекс ҳамчун параметри дуюми callback меояд.
Ишора 2 cart.filter((item, i) => cart.indexOf(___) === ___). Такрорҳои нест шуда: фарқи дарозии ду массив.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
07 find ва findIndex: аввалин мувофиқро ёфтан
Аксар вақт на рӯйхат, балки як унсури мушаххас лозим аст: мол бо номи лозимӣ, донишҷӯ бо номи лозимӣ, аввалин рӯзи гарм. Барои ин find ҳаст.
Монандӣ аз ҳаёт
Шумо дар истгоҳи таксӣ мошинеро меҷӯед, ки ба Варзоб меравад. Шумо дар паҳлӯи қатор қадам зада, аз ронандагон навбат ба навбат мепурсед. Ҳамин ки аввалин мувофиқро ёфтед — менишинед ва минбаъд намепурсед. Ва агар касе намеравад — бе чизе мераве. Ин маҳз find аст: аввалин ёфтшуда ё undefined.
arr.find((element, index, array) => true ё false) Бармегардонад: аввалин унсури мувофиқ ё undefined Аслиро тағйир намедиҳад
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const temps = [36 , 38 , 41 , 43 , 39 ];
console.log (temps.find ((t) => t > 40 )); // → 41
console.log (temps.find ((t) => t > 50 )); // → undefined
Ҳам 41 ва ҳам 43 мувофиқанд, аммо find дар мувофиқати аввал истода, худи унсурро бармегардонад — на массив.
findIndex — дар куҷо истодааст
arr.findIndex((element) => true ё false) Бармегардонад: индекс ё -1 Аслиро тағйир намедиҳад
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const temps = [36 , 38 , 41 , 43 , 39 ];
const i = temps.findIndex ((t) => t > 40 );
console.log (i); // → 2
console.log (`Жара началась в день ${i + 1}` ); // → Гармо дар рӯзи 3 оғоз шуд
console.log (temps.findIndex ((t) => t > 50 )); // → -1
findIndex аз indexOf чӣ фарқ дорад? indexOf қимати мушаххас -ро меҷӯяд (indexOf(41)), ва findIndex — унсурро аз рӯи шарт («аввалин аз 40 зиёд»).
find бо объектҳо
Мини-пешнамоиши объектҳоро ба ёд доред? Бо онҳо find комилан кушода мешавад: сабтро аз рӯи ном меёбем ва аз он қимати лозимиро мегирем.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const students = [
{ name: "Фарход" , score: 74 },
{ name: "Зарина" , score: 95 },
{ name: "Далер" , score: 58 },
];
const zarina = students.find ((s) => s.name === "Зарина" );
console.log (zarina); // → { name: "Зарина", score: 95 }
console.log (zarina.score); // → 95
find ё filter?
findfilterЧӣ бармегардонад як унсур массиви унсурҳо Агар чизе ёфт нашавад undefined[]Кай меистад дар мувофиқати аввал тамоми массивро мегузарад Мисоли вазифа «мол бо id 7» «ҳамаи молҳои аз 50 арзонтар»
Хатои маъмул: undefined-ро наёзмудед
Агар find чизеро наёфта бошад, undefined бармегардонад. Кӯшиши аз он хосият гирифтан барномаро вайрон мекунад.
Ин код хато медиҳад · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const students = [{ name: "Фарход" , score: 74 }];
const found = students.find ((s) => s.name === "Манижа" );
console.log (found.score); // undefined хосияти score надорад
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const students = [{ name: "Фарход" , score: 74 }];
const found = students.find ((s) => s.name === "Манижа" );
if (found) {
console.log (found.score);
} else {
console.log ("Студент не найден" ); // → Студент не найден
}
Амалия: мустаҳкам мекунем
Ҳамеша варианти «ёфт нашуд»-ро дар хотир доред — дар додаҳои воқеӣ он пайваста рӯй медиҳад.
ВАЗИФАИ 7.1 Аввалин рӯзи боронӣ осон
Боришот дар Душанбе аз рӯи рӯзҳои ҳафта дода шудааст (бо миллиметр). Тавассути find аввалин қимати зиёда аз 5-ро ёбед, ва тавассути findIndex — индекси онро. Сатрро бо рақами рӯз барои одам (аз 1) баровед. Сипас қимати зиёда аз 100-ро ҷӯед ва натиҷаро баровед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const rain = [0 , 2 , 0 , 7 , 12 , 0 , 3 ];
// коди шумо инҷо
Натиҷаи интизоршаванда 7
Сильный дождь в день 4
undefined
Ишора 1 Ҳарду метод callback-и якхеларо (mm) => mm > 5 мегиранд, аммо чизи гуногун бармегардонанд: қимат ва индекс.
Ишора 2 const day = rain.findIndex(___); рақам барои одам — day + ___.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 7.2 Рӯзномаи гурӯҳ миёна
Рӯзнома бо балҳои донишҷӯён ҳаст. Ёбед ва баровед: 1) бали Нилуфар; 2) номи аввалин донишҷӯ бо бали аз 60 паст; 3) индекси Шаҳром дар рӯзнома.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const students = [
{ name: "Фарход" , score: 74 },
{ name: "Нилуфар" , score: 88 },
{ name: "Шахром" , score: 52 },
{ name: "Манижа" , score: 45 },
];
// коди шумо инҷо
Натиҷаи интизоршаванда 88
Шахром
2
Ишора 1 find объекти пурраи донишҷӯро бармегардонад — қиматро тавассути нуқта гиред: .score ё .name.
Ишора 2 students.find((s) => s.name === ___).score; барои индекс — students.findIndex((s) => ___).
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 7.3 Навбат ба духтур душвор
Сайти поликлиника наздиктарин вақти холиро нишон медиҳад. Функсияи firstFree(slots, busy)-ро нависед: он аввалин вақтро аз slots бармегардонад, ки дар busy нест. Агар вақти холӣ набошад, функсия сатри Свободных мест нет-ро бармегардонад.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const slots = ["09:00" , "09:30" , "10:00" , "10:30" , "11:00" ];
const busyMonday = ["09:00" , "09:30" , "10:30" ];
const busyTuesday = ["09:00" , "09:30" , "10:00" , "10:30" , "11:00" ];
function firstFree (slots, busy) {
// коди шумо инҷо
}
console.log (firstFree (slots, busyMonday));
console.log (firstFree (slots, busyTuesday));
console.log (firstFree (slots, []));
Натиҷаи интизоршаванда 10:00
Свободных мест нет
09:00
Ишора 1 Вақт холӣ аст, агар он ба массиви busy дохил нашавад . Барои санҷиши «дохил мешавад» шумо includes доред, ва «не» — ин ! аст.
Ишора 2 const free = slots.find((time) => !busy.___(time)); Баъд: агар free === undefined — сатри паёмро баргардонед, вагарна — free.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
08 some: оё ҳадди аққал яке ҳаст?
Баъзан чизеро ҷустан ё интихоб кардан лозим нест — танҳо ҷавоби «ҳа» ё «не» лозим аст. Оё дар сабад моли бе мавҷудият ҳаст? Оё дар байни баҳоҳо дугона ҳаст? Оё паёмҳои нахонда ҳастанд? Барои ин some («баъзе, ҳадди аққал яке») ҳаст.
Монандӣ аз ҳаёт
Омӯзгор ба синф медарояд ва мепурсад: «Оё ҳадди аққал дар яке заряднок барои телефон ҳаст?». Ҳамин ки аввалин даст боло шуд — ҷавоб «ҳа», аз боқимонда пурсидан лозим нест. Агар касе боло накард — ҷавоб «не».
arr.some((element, index, array) => true ё false) Бармегардонад: true / false Аслиро тағйир намедиҳад
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const grades = [4 , 5 , 3 , 5 , 2 ];
console.log (grades.some ((g) => g === 2 )); // → true
console.log (grades.some ((g) => g === 1 )); // → false
some барвақт меистад
Боварӣ ҳосил мекунем, ки some дар ҳақиқат санҷишро дар аввалин «ҳа» қатъ мекунад. Ба callback console.log илова мекунем:
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const prices = [15 , 40 , 250 , 30 , 600 ];
const hasExpensive = prices.some ((p) => {
console.log (`Проверяю ${p}` );
return p > 200 ;
});
console.log (hasExpensive);
// Мебарорад:
// Проверяю 15
// Проверяю 40
// Проверяю 250
// true
То 30 ва 600 навбат нарасид: ҷавоб аллакай маълум аст. Дар массивҳои калон ин вақтро сарфа мекунад.
Массиви холӣ → false
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const messages = [];
console.log (messages.some ((m) => m === "новое" )); // → false
Мантиқӣ: дар массиви холӣ як унсур ҳам нест, пас «ҳадди аққал як мувофиқ» низ нест.
Маслиҳат: some ва includes
Агар шумо қимати мушаххас -ро меҷӯед, includes соддатар аст: grades.includes(2). Ва some вақте лозим аст, ки шарт ҳаст: «оё баҳо аз се паст ҳаст», «оё моли аз 200 гаронтар ҳаст».
Хатои маъмул
Истифодаи filter(...).length > 0 дар ҷое, ки танҳо ҷавоби «ҳа/не» лозим аст. Кор мекунад, аммо filter тамоми массивро мегузарад ва массиви нави нолозим эҷод мекунад. some кӯтоҳтар, фаҳмотар аст ва барвақттар меистад.
Амалия: мустаҳкам мекунем
some — савол «оё ҳадди аққал яке?» аст. Натиҷа ҳамеша true ё false аст.
ВАЗИФАИ 8.1 Оё нагузаштаҳо ҳастанд? осон
Балҳо барои корҳои назоратӣ дода шудаанд. Тавассути some санҷед: оё ҳадди аққал як натиҷаи 90 ва боло ҳаст, ва оё ҳадди аққал як натиҷаи аз 50 паст ҳаст. Сатрҳоро баровед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const scores = [55 , 62 , 48 , 70 ];
// коди шумо инҷо
Натиҷаи интизоршаванда Есть отличники: false
Есть несдавшие: true
Ишора 1 Ду даъвати алоҳидаи some бо шартҳои гуногун лозим аст.
Ишора 2 scores.some((s) => s >= ___) ва scores.some((s) => s < ___), натиҷаро ба сатри қолабӣ гузоред.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 8.2 Санҷиш барои аллергия миёна
Дар барномаи тарабхона меҳмон маҳсулотеро қайд кард, ки ба онҳо аллергия дорад. Функсияи hasAllergen(dish, allergens)-ро нависед: он true бармегардонад, агар ҳадди аққал як маҳсулоти таом дар рӯйхати аллергенҳо бошад. Самбуса ва шакаробро санҷед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const allergens = ["орехи" , "кунжут" ];
const sambusa = ["тесто" , "мясо" , "лук" , "кунжут" ];
const shakarob = ["помидор" , "огурец" , "лук" , "кашнич" , "фатир" ];
function hasAllergen (dish, allergens) {
// коди шумо инҷо
}
console.log (`Самбуса опасна: ${hasAllergen(sambusa, allergens)}` );
console.log (`Шакароб опасен: ${hasAllergen(shakarob, allergens)}` );
Натиҷаи интизоршаванда Самбуса опасна: true
Шакароб опасен: false
Ишора 1 Аз маҳсулоти таом мегузарем ва барои ҳар кадом мепурсем: «оё ин маҳсулот ба аллергенҳо дохил мешавад?».
Ишора 2 return dish.some((product) => allergens.___(product));
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 8.3 Санҷиши шакл душвор
Пеш аз фиристодани шакли сабти ном бояд боварӣ ҳосил кард, ки ҳамаи майдонҳо пур шудаанд. Функсияи checkForm(fields)-ро нависед: агар ҳадди аққал як майдон холӣ бошад — Заполните все поля-ро баргардонед, вагарна — Форма отправлена. Муҳим: майдоне, ки дар он танҳо фосилаҳо ҳаст, низ холӣ ҳисоб мешавад.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const form1 = ["Мадина" , "" , "madina@mail.tj" , "Душанбе" ];
const form2 = ["Рустам" , " " , "rustam@mail.tj" , "Бохтар" ];
const form3 = ["Сабрина" , "+992 90 123 45 67" , "sabrina@mail.tj" , "Куляб" ];
function checkForm (fields) {
// коди шумо инҷо
}
console.log (checkForm (form1));
console.log (checkForm (form2));
console.log (checkForm (form3));
Натиҷаи интизоршаванда Заполните все поля
Заполните все поля
Форма отправлена
Ишора 1 Сатрҳо методи trim() доранд — он фосилаҳои канорро мебарорад: " ".trim() ба "" табдил мешавад.
Ишора 2 const hasEmpty = fields.some((f) => f.___() === ___); баъд if ва ду return.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
09 every: оё ҳама мувофиқанд?
every («ҳар як») — бародари some аст. Он ба ин савол ҷавоб медиҳад: «оё ҳамаи унсурҳо ба шарт мувофиқанд?». Оё ҳамаи молҳо мавҷуданд? Оё ҳамаи донишҷӯён супориданд? Оё ҳамаи майдонҳои шакл дурустанд?
Монандӣ аз ҳаёт
Ронандаи маршрутка пеш аз сафар ба Искандаркӯл месанҷад: оё ҳамаи мусофирон камарбандро бастаанд? Ӯ аз салон мегузарад, ва ҳамин ки аввалин бастанашударо мебинад — ҷавоб «не», минбаъд нигоҳ кардан лозим нест. Ҷавоби «ҳа» танҳо дар сурате мешавад, ки ҳамаи мусофирон бе истисно бастаанд.
arr.every((element, index, array) => true ё false) Бармегардонад: true / false Аслиро тағйир намедиҳад
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const scores = [72 , 85 , 60 , 91 ];
console.log (scores.every ((s) => s >= 60 )); // → true
console.log (scores.every ((s) => s >= 70 )); // → false
every дар аввалин «не» меистад, ҳамон тавр ки some дар аввалин «ҳа» меистад. Дар даъвати дуюм санҷиш дар 60 анҷом ёфт.
Массиви холӣ → true. Чаро?
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const cart = [];
console.log (cart.every ((qty) => qty > 0 )); // → true
Ин аҷиб менамояд, аммо мантиқ чунин аст: every вайронкунанда — унсурро, ки мувофиқ нест, меҷӯяд. Дар массиви холӣ вайронкунанда нест, пас «ҳама мувофиқанд». Мисли ронандаи маршрутка: агар дар салон касе набошад, пас касе бастанашуда ҳам нишаста нест.
Қапқон
Бинобар ин қоида every дар массиви холӣ осон фиреб медиҳад. Санҷиши «ҳамаи молҳои сабад мавҷуданд» дар сабади холӣ true медиҳад — ва тугмаи «Фармоиш додан» фаъол мешавад. Агар массиви холӣ барои шумо ҳолати махсус бошад, онро алоҳида санҷед: arr.length === 0.
some муқобили every
someeveryСавол оё ҳадди аққал яке мувофиқ аст? оё ҳама мувофиқанд? Меистад дар аввалин true дар аввалин false Массиви холӣ falsetrueБа оператор монанд аст || (Ё)&& (ВА)
Пайванд бо мантиқи дарсҳои гузашта мустақим аст. [a, b, c].some(check) — ин мисли check(a) || check(b) || check(c) аст. Ва [a, b, c].every(check) — мисли check(a) && check(b) && check(c).
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const ages = [19 , 22 , 17 ];
const isAdult = (age) => age >= 18 ;
console.log (ages.some (isAdult)); // → true
console.log (ages.every (isAdult)); // → false
console.log (isAdult (19 ) && isAdult (22 ) && isAdult (17 )); // → false
Диққат диҳед: callback-ро пешакӣ эълон карда, бо ном додан мумкин аст — ages.some(isAdult). Бе қавсайн, чунон ки дар мавзӯи callback-ҳо муҳокима кардем.
Амалия: мустаҳкам мекунем
Пеш аз ҳар every аз худ бипурсед: агар массив холӣ бошад, чӣ бояд рӯй диҳад?
ВАЗИФАИ 9.1 Оё ҳама супориданд? осон
Имтиҳон бо 60 бал ва боло супурда ҳисоб мешавад. Тавассути every ду гурӯҳро санҷед ва сатрҳоро баровед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const groupA = [72 , 85 , 60 , 91 ];
const groupB = [72 , 59 , 88 ];
// коди шумо инҷо
Натиҷаи интизоршаванда Группа A сдала: true
Группа B сдала: false
Ишора 1 Шарт барои ҳарду гурӯҳ як аст — онро ба функсияи тирдори алоҳида баровардан мумкин аст.
Ишора 2 const passed = (s) => s >= ___; баъд groupA.every(___).
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 9.2 Обуҳаво барои урдугоҳ миёна
Урдугоҳи тобистона барои кӯдакон мувофиқ аст, агар ҳар рӯз ҳарорат аз 18 то 30 дараҷа, бо дохил, бошад. Функсияи isComfortable(temps)-ро нависед ва Варзоб, Душанбе ва пешгӯии холиро санҷед. Фикр кунед, ки чаро барои пешгӯии холӣ чунин ҷавоб мебарояд.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const varzob = [24 , 27 , 22 , 29 , 26 ];
const dushanbe = [35 , 38 , 29 , 40 ];
const noData = [];
function isComfortable (temps) {
// коди шумо инҷо
}
console.log (isComfortable (varzob));
console.log (isComfortable (dushanbe));
console.log (isComfortable (noData));
Натиҷаи интизоршаванда true
false
true
Ишора 1 «Аз 18 то 30, бо дохил» — ин ду шарти якбора аст, ки бо ВА пайваст шудаанд.
Ишора 2 return temps.every((t) => t >= ___ && t <= ___);
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 9.3 Оё фармоиш додан мумкин аст? душвор
Дар сабад миқдори ҳар мол нигоҳ дошта мешавад. Функсияи canCheckout(quantities)-ро нависед, ки бармегардонад: Корзина пуста — агар мол набошад; Есть товар с нулевым количеством — агар ҳадди аққал дар як мол миқдор 0 бошад; Можно оформлять — агар ҳамаи миқдорҳо аз сифр зиёд бошанд. Қапқони массиви холиро дар хотир доред.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
function canCheckout (quantities) {
// коди шумо инҷо
}
console.log (canCheckout ([2 , 1 , 3 ]));
console.log (canCheckout ([2 , 0 , 1 ]));
console.log (canCheckout ([]));
Натиҷаи интизоршаванда Можно оформлять
Есть товар с нулевым количеством
Корзина пуста
Ишора 1 Тартиби санҷишҳо муҳим аст. Массиви холиро аввалин санҷед: вагарна every true мегӯяд, ва функсия «Можно оформлять» ҷавоб медиҳад.
Ишора 2 if (quantities.length === 0) return ___; баъд if (quantities.some((q) => q === 0)) return ___; ва санҷиши охирин тавассути every.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
10 reduce: массивро ба як қимат овардан
reduce («гирд овардан, кӯтоҳ кардан») — қудратмандтарин ва нофамилтарин методи дарс аст. Он аз болои массив мегузарад ва аз ҳамаи унсурҳо як қимат ҷамъ мекунад: ҷамъ, ҳадди аксар, сатри ниҳоӣ, ҳисоб. Шитоб накунед: онро оҳиста ҷудо мекунем.
Монандӣ аз ҳаёт
Хазинаи чойхона. Ширкат палав, самбуса, хӯриш ва чой фармуд. Хазинадор аз сифр дар экрани калкулятор оғоз мекунад. Таоми якумро мегирад — нархашро илова мекунад, дар экран ҷамъи нави миёнагӣ. Таоми навбатиро мегирад — ба он чӣ дар экран аст, илова мекунад. Ва ҳамин тавр то таоми охирин. Он чи дар охир дар экран аст — ҷамъи чек аст.
Адади дар экрани хазинадор аккумулятор (аз калимаи «ҷамъ кардан») номида мешавад. Ин мисли ганҷина аст: ба он ҳамеша чизе илова мешавад, ва дар охир онро мекушоем.
arr.reduce((acc, current) => accиНав, қимати_оғозӣ) Бармегардонад: як қимати ниҳоӣ Аслиро тағйир намедиҳад
acc аккумулятор — ҷамъи миёнагӣ. Дар қадами аввал ба қимати оғозӣ баробар аст, минбаъд — ба он чӣ callback дар қадами гузашта баргардонд.
current унсури ҷории массив.
қимати оғозӣ аргументи дуюми reduce (пас аз callback). Хазинадор аз чӣ оғоз мекунад: одатан барои ҷамъ 0.
Чекро қадам ба қадам ҳисоб мекунем
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const bill = [120 , 45 , 30 , 75 ];
const total = bill.reduce ((acc, current) => acc + current, 0 );
console.log (total); // → 270
Callback 4 бор даъват мешавад — барои ҳар унсур як бор. Ҳар дафъа он ҷамъи кӯҳна ва нархи ҷориро мегирад, ва ҷамъи навро бармегардонад.
Қадам acc (дар экран буд)current (таом)Callback acc + current бармегардонад оғоз acc = 0 — қимати оғозӣ, аргументи дуюми reduce 1 01200 + 120 = 1202 12045120 + 45 = 1653 16530165 + 30 = 1954 19575195 + 75 = 270натиҷа унсурҳо тамом шуданд — reduce acc-и охиринро бармегардонад: 270
Ба асосӣ диққат диҳед: он чи callback баргардонд, дар қадами оянда acc мешавад . Агар callback чизеро барнагардонад (return-ро дар қавсайни фигурӣ фаромӯш карданд), дар қадами оянда acc undefined мешавад.
Ҳамон код, аммо бо «нигоҳ кардан» ба ҳар қадам:
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const bill = [120 , 45 , 30 , 75 ];
const total = bill.reduce ((acc, current) => {
console.log (`acc = ${acc}, current = ${current}, вернём ${acc + current}` );
return acc + current;
}, 0 );
console.log (`Итого: ${total} сомони` );
// Мебарорад:
// acc = 0, current = 120, вернём 120
// acc = 120, current = 45, вернём 165
// acc = 165, current = 30, вернём 195
// acc = 195, current = 75, вернём 270
// Итого: 270 сомони
Ҳамеша қимати оғозиро диҳед
Қимати оғозиро навиштан лозим нест — он гоҳ acc дар оғоз унсури аввали массив мешавад, ва гузариш аз дуюм оғоз мегардад. Барои ҷамъи ададҳо ин ҳатто кор мекунад. Аммо ду ҳолат ҳаст, ки дар онҳо ин барномаро вайрон мекунад.
Ҳолати 1: массиви холӣ. Бе қимати оғозӣ reduce намедонад аз куҷо оғоз кунад, ва хато медиҳад.
Ин код хато медиҳад · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const emptyBill = [];
const total = emptyBill.reduce ((acc, current) => acc + current);
console.log (total);
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const emptyBill = [];
const total = emptyBill.reduce ((acc, current) => acc + current, 0 );
console.log (total); // → 0
Ҳолати 2: унсурҳо аз он навъе нестанд, ки натиҷа аст. Дарозии умумии номҳоро ҳисоб мекунем. Бе қимати оғозӣ acc-и якум сатри «Фарход» мешавад, ва минбаъд ададҳо ба сатр часпида мешаванд.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const names = ["Фарход" , "Мадина" , "Рустам" ];
const wrong = names.reduce ((acc, name) => acc + name.length);
console.log (wrong); // → Фарход66
const right = names.reduce ((acc, name) => acc + name.length, 0 );
console.log (right); // → 18
Маслиҳат
Одат кунед: ҳамеша қимати оғозиро нависед. Барои ҷамъ — 0, барои сатр — "", барои ҳисоб — {}. Ин фавран нишон медиҳад, ки натиҷа кадом навъ мешавад.
Ҳадди аксар
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const temps = [36 , 41 , 38 , 43 , 39 ];
const max = temps.reduce ((acc, t) => (t > acc ? t : acc), temps[0 ]);
console.log (max); // → 43
Дар ин ҷо дар acc «калонтарин то ин лаҳза» нигоҳ дошта мешавад. Дар ҳар қадам муқоиса мекунем: агар ҷорӣ калонтар бошад — он ҳадди аксари нав мешавад, вагарна кӯҳнаро мемонем. Аз унсури аввал оғоз мекунем, на аз 0: мабодо ҳамаи ҳароратҳо манфӣ бошанд (зимистон дар Хоруғ −20 низ мешавад).
Барои ҳадди аксари оддӣ роҳи кӯтоҳ низ ҳаст — Math.max(...temps). Аммо онро тавассути reduce ҷудо кардан муфид аст: ҳамин тавр вазифаҳое ҳал мешаванд, ки функсияи тайёр надоранд.
Ҳисоби такрорҳо (шиносоии сабук бо объект)
Қимати оғозӣ метавонад объекти холии {} бошад. Дар ҳар қадам ба он «ҳисобкунак» барои калимаи ҷорӣ илова мекунем.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const orders = ["чой" , "самбуса" , "чой" , "нон" , "чой" ];
const count = orders.reduce ((acc, item) => {
acc[item] = (acc[item] || 0 ) + 1 ;
return acc;
}, {});
console.log (count); // → { чой: 3, самбуса: 1, нон: 1 }
Сатри acc[item] = (acc[item] || 0) + 1 чунин хонда мешавад: «ҳисоби ҷории ин таомро бигир, ва агар он ҳоло нест — 0 бигир, 1 илова кун ва баргардон навис». Қавсайни мураббаъи acc[item] — роҳи муроҷиат ба калидест, ки номаш дар тағйирёбанда мебошад. Муфассалтар — дар дарс дар бораи объектҳо.
Сатрро мепайвандем
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const fruits = ["зардолу" , "гранат" , "дыня" ];
const text = fruits.reduce ((acc, fruit, i) => acc + (i === 0 ? "" : ", " ) + fruit, "" );
console.log (text); // → зардолу, гранат, дыня
console.log (fruits.join (", " )); // → зардолу, гранат, дыня
Барои пайвастан методи тайёри join(ҷудокунанда) ҳаст — он сатрро аз ҳамаи унсурҳо бармегардонад. Онро вақте истифода баред, ки танҳо пайвастан лозим аст. Ва reduce вақте ба кор меояд, ки пайвастан мураккабтар аст: бо шартҳо, бо рақамгузорӣ, бо ҳисоб дар ҷараён.
Хатогиҳои маъмул
1. return-ро фаромӯш карданд дар callback бо қавсайни фигурӣ — дар қадами дуюм acc undefined мешавад, ва натиҷа — NaN («адад нест»).
2. Тартиби параметрҳоро омехтанд. Якум ҳамеша аккумулятор меояд, дуюм — унсури ҷорӣ: (acc, current).
3. Қимати оғозиро надоданд — ду ҳолати болоро бинед.
Ишораи ЗС
reduce-ро беҳтар аз ҳама тавассути ҷадвал мефаҳманд. Хоҳиш кунед: «Барои reduce-и ман ҷадвали қадамҳо бисоз: сутунҳои acc, current, callback чӣ баргардонд» — ва коди худ ва додаҳоро гузоред.
Амалия: мустаҳкам мекунем
Пеш аз навиштани reduce ба ду савол ҷавоб диҳед: аз чӣ оғоз мекунем (қимати оғозӣ) ва аз ҷамъи кӯҳна ва унсури ҷорӣ чӣ тавр ҷамъи нав гирем.
ВАЗИФАИ 10.1 Ҳисоб дар чойхона осон
Гурӯҳи дӯстон чой, самбуса, палав ва нон фармуданд. Ҷамъи чекро тавассути reduce ҳисоб кунед ва сатрро баровед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const bill = [15 , 8 , 25 , 6 , 12 ];
// коди шумо инҷо
Натиҷаи интизоршаванда Итого: 66 сомони
Ишора 1 Ҷамъи нав = ҷамъи кӯҳна + нархи ҷорӣ. Аз сифр оғоз мекунем.
Ишора 2 const total = bill.reduce((acc, price) => ___ + ___, ___);
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 10.2 Рекорди бригада миёна
Килограммҳои пахтаи аз ҷониби ҳар узви бригада дар як рӯз чидашуда дода шудаанд. Тавассути reduce (бе Math.max ва Math.min) калонтарин ва хурдтарин натиҷаро ёбед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const harvest = [140 , 95 , 182 , 120 , 176 ];
// коди шумо инҷо
Натиҷаи интизоршаванда Рекорд: 182 кг
Меньше всех: 95 кг
Ишора 1 Дар acc «беҳтарин натиҷа то ин лаҳза»-ро нигоҳ доред. Қимати оғозӣ — унсури аввали массив.
Ишора 2 harvest.reduce((acc, kg) => (kg > acc ? ___ : ___), harvest[0]) — барои ҳадди ақал аломати муқоисаро иваз кунед.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 10.3 Овоздиҳӣ: ба куҷо меравем? душвор
Гурӯҳ овоз медиҳад, ки дар рӯзҳои истироҳат ба куҷо раванд. Тавассути reduce бо қимати оғозии {} овозҳоро барои ҳар ҷой ҳисоб кунед ва объекти ҳосилшударо баровед. Сипас сатрро бо шумораи овозҳо барои Варзоб баровед, онро аз ҳамин объект гирифта.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const votes = ["Варзоб" , "Искандеркуль" , "Варзоб" , "Ирам" , "Искандеркуль" , "Варзоб" ];
// коди шумо инҷо
Натиҷаи интизоршаванда { Варзоб: 3, Искандеркуль: 2, Ирам: 1 }
За Варзоб: 3
Ишора 1 Мисоли фармоишҳои чойхонаро дар боло ба ёд оред: дар ҳар қадам ҳисобкунакро барои ҷойи ҷорӣ зиёд кунед ва acc-ро баргардонед.
Ишора 2 Дар callback: acc[place] = (acc[place] || ___) + ___; return ___;. Овозҳо барои Варзоб: result["Варзоб"].
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
11 sort: мураттабкунӣ
Мураттабкунӣ ҳама ҷо лозим аст: молҳо «аввал арзонҳо», донишҷӯён аз рӯи алифбо, бозиҳо аз рӯи сана. Методи sort унсурҳои массивро мураттаб мекунад. Аммо он ду хусусият дорад, ки қариб ҳама дар онҳо пешпо мехӯранд. Ҳардуро ҷудо мекунем.
arr.sort((a, b) => адад) Бармегардонад: ҳамон массив, аллакай мураттаб Массиви аслиро тағйир медиҳад
Хусусияти 1: бе callback sort ҳамчун сатр муқоиса мекунад
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const prices = [5 , 100 , 25 , 1 ];
prices.sort ();
console.log (prices); // → [1, 100, 25, 5]
Чаро 100 пештар аз 25 шуд? Бе callback sort ҳар унсурро ба сатр табдил медиҳад ва сатрҳоро аз рӯи аломатҳо муқоиса мекунад, мисли калимаҳо дар луғат: "1", "100", "25", "5". Сатри "100" бо «1» оғоз мешавад, бинобар ин пеш аз "25", ки бо «2» оғоз мешавад, меистад. Ҳамон тавр ки дар луғат «ананас» пеш аз «банан» меистад, новобаста аз дарозӣ.
Callback-муқоисакунанда: (a, b) => a - b
Барои дуруст мураттаб кардани ададҳо функсияи муқоиса (компаратор) медиҳем. sort худаш борҳо ҷуфтҳои унсурҳои a ва b-ро мегирад ва аз callback мепурсад: «кадоме аз онҳо бояд пештар истад?». Callback бо адад ҷавоб медиҳад:
Callback баргардонд Ин барои sort чӣ маъно дорад адади манфӣ (масалан, −3) a-ро пеш аз b мемонемадади мусбат (масалан, 7) b-ро пеш аз a мемонем0тартиб байни онҳо муҳим нест, чун ҳаст мемонем
Акнун бинед, чаро a - b мураттабкуниро аз рӯи афзуншавӣ медиҳад. Бигзор a = 5, b = 25: 5 − 25 = −20, манфӣ — яъне 5 пеш аз 25. Бигзор a = 100, b = 25: 100 − 25 = 75, мусбат — яъне 25 пеш аз 100. Ададҳои хурдтар ба пеш мераванд. Ва b - a ҳама чизро баръакс мекунад — аз рӯи камшавӣ.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const prices = [5 , 100 , 25 , 1 ];
prices.sort ((a, b) => a - b);
console.log (prices); // → [1, 5, 25, 100]
prices.sort ((a, b) => b - a);
console.log (prices); // → [100, 25, 5, 1]
Маслиҳат: чӣ тавр дар хотир нигоҳ доштан
a - b — «аввал a, баъд b», аз рӯи алифбо, аз рӯи афзуншавӣ: аз хурд ба калон. b - a — баръакс, аз калон ба хурд.
Мураттабкунии сатрҳо: localeCompare
Барои сатрҳо тарҳ кор намекунад ("Абдулло" - "Далер" — ин NaN аст). sort()-ро бе callback даъват кардан мумкин аст, аммо барои номҳои бо кириллица он хато мекунад: ҳарфҳои калон дар он пеш аз хурдҳо меоянд, ва ҳарфи «Ё» умуман ба оғоз мепарад.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const names = ["манижа" , "Фарход" , "Абдулло" ];
console.log ([... names].sort ()); // → ["Абдулло", "Фарход", "манижа"]
console.log ([... names].sort ((a, b) => a.localeCompare (b))); // → ["Абдулло", "манижа", "Фарход"]
const team = ["Жасур" , "Ёдгор" , "Евгений" ];
console.log ([... team].sort ()); // → ["Ёдгор", "Евгений", "Жасур"]
console.log ([... team].sort ((a, b) => a.localeCompare (b))); // → ["Евгений", "Ёдгор", "Жасур"]
a.localeCompare(b) — методи сатр, ки онро бо сатри дигар «ба тарзи инсонӣ», бо риояи қоидаҳои забон муқоиса мекунад. Он худаш адади манфӣ, мусбат ё 0 бармегардонад — маҳз он чи ба sort лозим аст. Барои мураттабкунии «аз Я то А» ҷой иваз кунед: b.localeCompare(a).
Мураттабкунии объектҳо
Callback ду объектро мегирад, ва мо майдони лозимаи онҳоро муқоиса мекунем.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const products = [
{ name: "Курутоб" , price: 35 },
{ name: "Самбуса" , price: 6 },
{ name: "Оши палав" , price: 30 },
];
products.sort ((a, b) => a.price - b.price);
console.log (products[0 ].name); // → Самбуса
console.log (products.at (-1 ).name); // → Курутоб
Хусусияти 2: sort массиви аслиро тағйир медиҳад
sort массиви нав эҷод намекунад — он унсурҳоро мустақиман дар массиви аслӣ ҷойгузин мекунад. Агар тартиби аслӣ ҳанӯз лозим бошад (масалан, тартибе, ки додаҳо аз сервер омаданд), аввал нусха созед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const scores = [70 , 95 , 82 ];
const sorted1 = [... scores].sort ((a, b) => b - a);
const sorted2 = scores.slice ().sort ((a, b) => b - a);
const sorted3 = scores.toSorted ((a, b) => b - a);
console.log (sorted1); // → [95, 82, 70]
console.log (sorted2); // → [95, 82, 70]
console.log (sorted3); // → [95, 82, 70]
console.log (scores); // → [70, 95, 82]
Усули сеюм — методи муосири toSorted. Он ҳамон корро мекунад, ки sort, аммо массиви нав бармегардонад ва аслро даст намезанад. Он дар JavaScript ба наздикӣ (соли 2023) пайдо шуд ва дар ҳамаи браузерҳои муосир кор мекунад.
Хатогиҳои маъмул
1. Мураттабкунии ададҳо бе callback: [5, 100, 25].sort() → [100, 25, 5]. Барои ададҳо ҳамеша (a, b) => a - b нависед.
2. Callback true/false бармегардонад ба ҷойи адад: (a, b) => a > b. Чунин callback ғайримунтазир кор мекунад. Маҳз адад лозим аст: a - b.
3. Фаромӯш карданд, ки sort мутатсия мекунад ва додаҳои аслиро «вайрон карданд». Аввал нусха — баъд мураттабкунӣ.
Амалия: мустаҳкам мекунем
Саволи асосӣ дар ҳар вазифа: ададҳо ё сатрҳо, аз рӯи афзуншавӣ ё камшавӣ, ва оё асл лозим аст.
ВАЗИФАИ 11.1 Масофаҳо аз Душанбе осон
Масофаҳои тақрибӣ аз Душанбе то шаҳрҳои гуногун бо километр дода шудаанд. Онҳоро аз рӯи афзуншавӣ, сипас аз рӯи камшавӣ баровед. Аввал кӯшиш кунед sort()-ро бе callback даъват кунед ва бинед, ки чӣ мешавад.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const km = [341 , 203 , 525 , 100 , 62 ];
// коди шумо инҷо
Натиҷаи интизоршаванда [62, 100, 203, 341, 525]
[525, 341, 203, 100, 62]
Ишора 1 Бе callback шумо [100, 203, 341, 525, 62]-ро мегиред — ададҳо ҳамчун сатр муқоиса шуданд, ва «62» охирин шуд.
Ишора 2 km.sort((a, b) => ___ - ___), барои камшавӣ a ва b-ро ҷой иваз кунед.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 11.2 Рӯйхати гурӯҳ аз рӯи алифбо миёна
Омӯзгор рӯйхати гурӯҳро аз рӯи алифбо мехоҳад, аммо тартиби аслӣ (тартиби сабти ном ба курс) бояд нигоҳ дошта шавад. Нусхаи мураттабро тавассути localeCompare гиред, сипас нусха ва аслро баровед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const group = ["Шахром" , "Абдулло" , "Манижа" , "Далер" , "Зарина" , "Фарход" ];
// коди шумо инҷо
Натиҷаи интизоршаванда ["Абдулло", "Далер", "Зарина", "Манижа", "Фарход", "Шахром"]
["Шахром", "Абдулло", "Манижа", "Далер", "Зарина", "Фарход"]
Ишора 1 Аввал нусха ([...group], slice() ё фавран toSorted), баъд мураттабкунӣ.
Ишора 2 const sorted = group.toSorted((a, b) => a.___(b));
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 11.3 Голзанони «Истиқлол» душвор
Голзанонро аз рӯи миқдори голҳо аз рӯи камшавӣ мураттаб кунед. Агар голҳо баробар бошанд — аз рӯи ном бо алифбо. Сипас ҷадвали намуди 1. Далер — 12-ро тавассути for...of ё map бо индекс баровед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const players = [
{ name: "Шахром" , goals: 7 },
{ name: "Далер" , goals: 12 },
{ name: "Рустам" , goals: 7 },
{ name: "Абдулло" , goals: 9 },
{ name: "Фарход" , goals: 3 },
];
// коди шумо инҷо
Натиҷаи интизоршаванда 1. Далер — 12
2. Абдулло — 9
3. Рустам — 7
4. Шахром — 7
5. Фарход — 3
Ишора 1 Дар callback аввал санҷед: агар голҳо гуногун бошанд — фарқи голҳоро баргардонед (аз рӯи камшавӣ). Агар якхела бошанд — номҳоро муқоиса кунед.
Ишора 2 (a, b) => { if (a.goals !== b.goals) return ___ - ___; return a.name.___(b.name); }
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
12 Занҷири методҳо
Шумо аллакай дидед: map, filter ва slice массиви нав бармегардонанд. Ва массиви нав низ ҳамаи методҳоро дорад. Яъне фавран методи навбатиро тавассути нуқта даъват кардан мумкин аст — занҷир ҳосил мешавад. Қариб ҳар коди воқеии коркарди додаҳо дар фронтенд ҳамин тавр менамояд.
Монандӣ аз ҳаёт
Конвейер дар корхонаи шарбат дар Истаравшан. Дар участкаи якум зардолуҳои пӯсидаро ҷудо мекунанд (filter), дар дуюм онҳоро мешӯянд ва мебуранд (map), дар сеюм ҳама чиз ба як бочкаи шарбат рехта мешавад (reduce). Ҳар участка натиҷаи пештараро мегирад. Занҷирро ҳамин тавр мехонем — аз боло ба поён, участка ба участка.
Вазифа: дар мағоза дар Корвон молҳои аз 100 сомонӣ гаронтарро гирифта, ба онҳо 10% тахфиф кардан ва ҷамъро ҳисоб кардан. Аввал қадам ба қадам, бо тағйирёбандаҳои миёнагӣ:
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const prices = [450 , 60 , 380 , 15 , 220 ];
const expensive = prices.filter ((p) => p > 100 );
console.log (expensive); // → [450, 380, 220]
const discounted = expensive.map ((p) => p * 0.9 );
console.log (discounted); // → [405, 342, 198]
const total = discounted.reduce ((acc, p) => acc + p, 0 );
console.log (total); // → 945
Ва акнун ҳамин чизро бо як занҷир. Ҳар методро аз сатри нав, аз нуқта оғоз карда менависем — ин тавр занҷирро хондан осон аст:
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const prices = [450 , 60 , 380 , 15 , 220 ];
const total = prices
.filter ((p) => p > 100 ) // [450, 380, 220]
.map ((p) => p * 0.9 ) // [405, 342, 198]
.reduce ((acc, p) => acc + p, 0 ); // 945
console.log (`К оплате: ${total} сомони` ); // → К оплате: 945 сомони
prices — додаҳои аслӣ, 5 нарх.
.filter(...) — 3 мол гарон мемонад. Массиви нав бармегардад.
.map(...) — ба массиви нав тахфиф татбиқ мешавад. Боз массиви нав бо ҳамон дарозӣ.
.reduce(...) — массив ба як адад печонида мешавад. Занҷир анҷом меёбад: адад аллакай методҳои массив надорад.
Занҷир бо объектҳо ва мураттабкунӣ
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const students = [
{ name: "Рустам" , score: 54 },
{ name: "Мадина" , score: 95 },
{ name: "Фарход" , score: 88 },
{ name: "Нилуфар" , score: 43 },
];
const honorBoard = students
.filter ((s) => s.score >= 60 )
.sort ((a, b) => b.score - a.score)
.map ((s) => `${s.name} (${s.score})` )
.join (", " );
console.log (honorBoard); // → Мадина (95), Фарход (88)
Дар ин ҷо sort пас аз filter меистад — ва ин бехатар аст: filter аллакай массиви нав баргардонд, бинобар ин мураттабкунӣ онро тағйир медиҳад, на students-и аслиро.
Хатогиҳои маъмул дар занҷирҳо
1. reduce дар миёна. Пас аз reduce одатан адад ё сатр ҳосил мешавад, ва бар он .map-ро даъват кардан мумкин нест — хатои «is not a function» мешавад.
2. sort дар аввали занҷир массиви аслиро вайрон мекунад. Онро пас аз filter/map/slice гузоред ё toSorted-ро истифода баред.
3. Занҷири аз ҳад дароз, ки кор намекунад. Тахмин накунед — онро ба тағйирёбандаҳои миёнагӣ ҷудо кунед ва ҳар якро тавассути console.log баровед, чун дар мисоли якум. Ин тавр шумо фавран мебинед, ки мушкил дар кадом участкаи конвейер аст.
Амалия: мустаҳкам мекунем
Ин вазифаҳо ба кори воқеии фронтенд-барномасоз монанданд. Аввал вазифаро бо калимаҳо ба участкаҳои конвейер ҷудо кунед, баъд код нависед.
ВАЗИФАИ 12.1 Фурӯши тахфифӣ дар Корвон осон
Мағозаи либос тахфифи 10%-ро ба ҳамаи аз 100 сомонӣ гаронтар эълон кард. Бо занҷири методҳо массиви нархҳои бо тахфифро (танҳо барои молҳои гарон) гиред ва онро баровед. Сипас ҷамъи ниҳоии пардохтро барои ин молҳо ҳисоб кунед.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const items = [
{ name: "Куртка" , price: 450 },
{ name: "Шапка" , price: 60 },
{ name: "Кроссовки" , price: 380 },
{ name: "Носки" , price: 15 },
{ name: "Рюкзак" , price: 220 },
];
// коди шумо инҷо
Натиҷаи интизоршаванда [405, 342, 198]
К оплате: 945 сомони
Ишора 1 Участкаҳои конвейер: гаронҳоро мондан → ҳар молро ба нархи бо тахфиф табдил додан → ҷамъ кардан.
Ишора 2 items.filter((it) => it.price > ___).map((it) => it.price * ___), баъд .reduce((acc, p) => ___, 0) бар массиви ҳосилшуда.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 12.2 Супоридагони имтиҳон миёна
Имтиҳон бо 60 бал ва боло супурда шудааст. Массиви номҳо -и супоридагонро аз рӯи алифбо гиред, ва баъд баҳои миёнаро танҳо дар байни супоридагон.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const students = [
{ name: "Фарход" , score: 88 },
{ name: "Мадина" , score: 95 },
{ name: "Рустам" , score: 54 },
{ name: "Зарина" , score: 76 },
{ name: "Шахром" , score: 61 },
{ name: "Нилуфар" , score: 43 },
{ name: "Далер" , score: 90 },
];
// коди шумо инҷо
Натиҷаи интизоршаванда ["Далер", "Зарина", "Мадина", "Фарход", "Шахром"]
Средний балл сдавших: 82
Ишора 1 Аввал супоридагонро тавассути filter ба тағйирёбанда нигоҳ доред — он барои ҳарду қисми вазифа ба кор меояд.
Ишора 2 Номҳо: passed.map((s) => ___).sort((a, b) => a.localeCompare(b)). Миёна: ҷамъи балҳо тавассути reduce, ки ба passed.___ тақсим шудааст.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
ВАЗИФАИ 12.3 Ҳисоботи обуҳаво оид ба Душанбе душвор
Пешгӯӣ барои ҳафта ҳаст. Функсияи weekReport(days)-ро нависед, ки 4 сатр мебарорад: гармтарин рӯз (тавассути reduce), ҳарорати миёна (бо як рақам пас аз вергул), рӯйхати рӯзҳои аз 38° гармтар бо вергул ва ҷавоб, ки оё ҳадди аққал як рӯз аз 30° салқинтар буд.
Таҳрир кардан мумкин аст · Ctrl + Enter ↺ Аз нав ▶ Иҷро кардан
const week = [
{ day: "Пн" , temp: 34 },
{ day: "Вт" , temp: 37 },
{ day: "Ср" , temp: 40 },
{ day: "Чт" , temp: 41 },
{ day: "Пт" , temp: 38 },
{ day: "Сб" , temp: 35 },
{ day: "Вс" , temp: 39 },
];
function weekReport (days) {
// коди шумо инҷо
}
weekReport (week);
Натиҷаи интизоршаванда Самый жаркий: Чт (41°)
Средняя: 37.7°
Жарче 38°: Ср, Чт, Вс
Был день прохладнее 30°: false
Ишора 1 Ҳар сатр — методи худ: рӯзи гарм — reduce, ки дар он acc — тамоми объекти рӯз; миёна — reduce барои ҷамъ ва toFixed(1); рӯйхат — filter + map + join; саволи охирин — some.
Ишора 2 Гарм: days.reduce((acc, d) => (d.temp > acc.temp ? ___ : ___), days[0]). Рӯйхат: days.filter((d) => d.temp > ___).map((d) => d.___).join(", "). Дар хотир доред: 38 — ин «гармтар аз 38» нест.
○ Ҳалшуда қайд кардан 💬 Дар бораи ин вазифа пурсидан
✓ Хулоса: хулосаи массивҳо
[] — массив; индексҳо аз 0; охирин — arr[arr.length - 1] ё arr.at(-1); индекси ғайримавҷуд → undefined.
Массиви const-ро дар дохил тағйир додан мумкин аст, аммо аз нав таъин кардан мумкин нест.
includes(x) → оё қимат ҳаст; indexOf(x) → индекс ё -1.
push(x) / pop() — охири массив; unshift(x) / shift() — оғоз. Мутатсия мекунанд.
splice(start, deleteCount, ...items) — дар миёна нест кардан/ҷобаҷо кардан/иваз кардан; ҳазфшудагонро бармегардонад. Мутатсия мекунад.
slice(start, end) — нусхаи қисм, end дохил намешавад; slice() ва [...arr] — нусхаи пурра.
Callback — функсияест, ки метод худаш онро барои ҳар унсур даъват мекунад: (element, index, array).
map — ҳар якро табдил додан, дарозӣ ҳамон. return-ро дар қавсайни фигурӣ фаромӯш накунед.
filter — мувофиқҳоро мондан, натиҷа метавонад [] бошад.
find / findIndex — аввалин мувофиқ ё undefined / -1. «Ёфт нашуд»-ро санҷед.
some — ҳадди аққал яке? (холӣ → false); every — ҳама? (холӣ → true).
reduce((acc, cur) => ..., оғоз) — ба як қимат овардан. Қимати оғозӣ — ҳамеша.
sort((a, b) => a - b) — ададҳо аз рӯи афзуншавӣ; сатрҳо — a.localeCompare(b). Мутатсия мекунад: нусха кунед ё toSorted гиред.
join(", ") — массивро ба сатр пайвастан.
Занҷир: filter → map → reduce, аз боло ба поён мехонем, чун конвейер.
Чӣ тавр дар бораи массивҳо аз ЗС хоҳиш кардан
1. Методро ном баред. Агар шумо медонед, ки кадом метод лозим аст, инро бигӯед: «тавассути filter ва map ҳал кун, бе давраҳо». Вагарна ЗС метавонад ҳалле диҳад, ки усулҳояш барои шумо нофаҳмост.
2. Мисоли додаҳо ва натиҷаи интизориро диҳед. «Инак массиви [450, 60, 380], мехоҳам [405, 342]-ро гирам» — ин тавр ЗС вазифаро дақиқ мефаҳмад ва тахмин намекунад.
3. Хоҳиш кунед, ки ҳар қадамро шарҳ диҳад. На танҳо «код нависед», балки «шарҳ деҳ, ки дар ҳар қадам чӣ рӯй медиҳад, ва қиматҳои миёнагиро нишон деҳ». Коде, ки шумо мефаҳмед, — аз они шумост; коде, ки оддӣ нусха кардед, — не.
ба тарзе кун, ки нархҳо ҳисоб шавандНусха бардоштан
Ман массиви молҳо дорам: [{ name: "Куртка", price: 450 }, { name: "Шапка", price: 60 }]. Мехоҳам ҷамъи нархи молҳои аз 100 сомонӣ гаронтарро бо тахфифи 10% гирам. Бо занҷири filter → map → reduce ҳал кун, бе давраҳо. Пас аз код ҳар қадамро шарҳ деҳ ва нишон деҳ, ки пас аз ҳар метод кадом массив ҳосил мешавад.Нусха бардоштан