Гузариш ба мундариҷа
Мавзӯи 10 аз 16
Назария

Массивҳо

Ин барои чӣ лозим аст

Рӯйхати харид, баҳоҳо дар чоряк, паёмҳо дар чат, молҳо дар мағоза — додаҳо аксар вақт бисёр ва якхела мебошанд. Сохтани тағйирёбандаҳои item1, item2, item3… нороҳат аст ва агар миқдор пешакӣ маълум набошад, ғайриимкон. Массив ҳар миқдор қиматро дар як тағйирёбанда бо тартиб нигоҳ медорад.

Сохтан ва индексҳо

const fruits = ["себ", "банан", "гелос"];
console.log(fruits[0]);       // себ
console.log(fruits[2]);       // гелос
console.log(fruits.length);   // 3
console.log(fruits[5]);       // undefined — чунин нест
console.log(fruits.at(-1));   // гелос — охирин

Унсурҳо аз сифр рақамгузорӣ мешаванд, мисли аломатҳои сатр. Унсури охирин — arr[arr.length - 1] ё arr.at(-1). Дар як массив қиматҳои навъҳои гуногун ва ҳатто массивҳои дигар ҷой дошта метавонанд.

Унсурро иваз кардан мумкин аст: fruits[1] = "нок";. Ин ҳатто бо const кор мекунад: доимӣ гузоштани массиви дигар-ро ба тағйирёбанда манъ мекунад, аммо мӯҳтавои массивро иваз кардан мумкин аст.

Илова кардан ва хориҷ кардан

const queue = ["Аня", "Тимур"];
queue.push("Ира");       // ба охир
queue.unshift("Олег");   // ба аввал
console.log(queue);
const last = queue.pop();    // охиринро хориҷ карда, бармегардонад
const first = queue.shift(); // аввалинро хориҷ карда, бармегардонад
console.log(last, first, queue);

Натиҷа:

["Олег","Аня","Тимур","Ира"]
Ира Олег ["Аня","Тимур"]

Ҷустуҷӯ

const nums = [4, 8, 15, 16, 23, 42];
console.log(nums.includes(15));  // true
console.log(nums.indexOf(16));   // 3
console.log(nums.indexOf(99));   // -1

Гузаштан

for-и классикӣ аз рӯи индексҳо ва for … of-и қулай аз рӯи қиматҳо:

const scores = [5, 4, 5, 3];
for (let i = 0; i < scores.length; i++) {
  console.log(`Баҳои №${i + 1}: ${scores[i]}`);
}

let sum = 0;
for (const s of scores) {
  sum += s;
}
console.log("Миёна:", sum / scores.length);

Натиҷа:

Баҳои №1: 5
Баҳои №2: 4
Баҳои №3: 5
Баҳои №4: 3
Миёна: 4.25

for … of содатар аст, вақте ки рақам лозим нест. Агар рақам лозим бошад — for-и классикӣ.

Порчаи массив, пайвастан, ҷойгиркунӣ

const letters = ["a", "b", "c", "d", "e"];
console.log(letters.slice(1, 3));   // ["b","c"] — нусхаи порча, аслӣ иваз намешавад
console.log(letters.join("-"));     // a-b-c-d-e — ба сатр
console.log([1, 2].concat([3, 4])); // [1,2,3,4] — якҷоякунӣ

letters.splice(1, 2);               // аз индекси 1 сар карда 2 унсурро хориҷ кардан
console.log(letters);               // ["a","d","e"]

slice — «нусха буридан» (аслӣ солим), splice — «воқеан буридан» (массивро иваз мекунад).

Нусхабардорӣ ва муқоиса — дом!

const a = [1, 2, 3];
const b = a;        // нусха НЕСТ! b ва a — як массив
b.push(4);
console.log(a);

const c = [...a];   // нусхаи ҳақиқӣ
c.push(5);
console.log(a, c);

console.log([1, 2] === [1, 2]);

Натиҷа:

[1,2,3,4]
[1,2,3,4] [1,2,3,4,5]
false

Тағйирёбанда худи массивро не, балки истинод-ро ба он нигоҳ медорад — мисли суроғаи хона. b = a суроғаро нусхабардорӣ мекунад, хона бошад як мемонад. Нусхаро бо [...a] (оператори spread) ё a.slice() месозанд. Бо ҳамин сабаб ду массиви аз рӯи мӯҳтаво якхела бо === баробар нестанд: инҳо ду «хона»-и гуногунанд. Мӯҳтаворо масалан чунин муқоиса кардан мумкин аст: JSON.stringify(x) === JSON.stringify(y).

Дар дохил чӣ гуна кор мекунад

Массив дар JS — объекти махсусест, ки калидҳояш рақамҳои 0, 1, 2… мебошанд, илова бар ин хосияти худкори length. Илова ва хориҷ кардан дар охир (push, pop) — тез аст. Вале shift ва unshift дарозтар кор мекунанд: ба ҳамаи унсурҳои дигар рақамҳоро иваз кардан лозим меояд. Дар массивҳои калон ин намоён аст.

Хатоҳои маъмул

  1. Индекс аз як. Унсури аввал — arr[0], на arr[1].
  2. Берун рафтан аз ҳудуд. arr[arr.length] — ин undefined аст. Охирин — arr[arr.length - 1].
  3. «Нусха» бо =. const copy = arr — ҳамон массив аст. Лозим аст [...arr].
  4. Массиви вурудиро вайрон карданд. Агар функсия бояд массиви нав баргардонад, дар аслӣ push, pop, reverse, sort, splice-ро даъват накунед — онҳо аслиро иваз мекунанд.
  5. Муқоиса бо ===. [1] === [1] → false. Мӯҳтаворо муқоиса кунед.

Ёддошт

Чӣ Чӣ тавр
Сохтан const a = [1, 2, 3];
Унсур, охирин a[0], a.at(-1)
Дарозӣ a.length
Ба охир / аз охир a.push(x), a.pop()
Ба аввал / аз аввал a.unshift(x), a.shift()
Ҷустуҷӯ a.includes(x), a.indexOf(x)
Гузаштан for (const x of a) { … }
Нусхаи порча a.slice(1, 3)
Хориҷ кардан дар дохил a.splice(i, n)
Нусхаи пурра [...a]
Ба сатр a.join(", ")

Суммаи массив

Осон+10 XP

Функсияи sumArray(numbers)-ро нависед, ки суммаи ҳамаи ададҳои массивро бармегардонад. Барои массиви холӣ — 0.

sumArray([1, 2, 3])  → 6
sumArray([])         → 0

Барои ҳал кардани масъалаҳо коннекторро пайваст кун

Коди масъалаҳо дар компютери худат иҷро мешавад — ин аз браузер тезтар ва боэътимодтар аст. Барои ин барномаи ройгони коннектори CodeWithMe лозим аст. Онро як бор пайваст кардан кифоя аст.

Коннекторро дар ин компютер ҷустуҷӯ мекунем…

  1. 1
    Коннекторро барои системаи худ (Windows, macOS ё Linux) зеркашӣ кун.Зеркашии коннекторДар саҳифаи зеркашӣ файлеро интихоб кун, ки дар номаш системаи ту ҳаст, масалан windows-amd64.
  2. 2Онро иҷро кун ва ҷузвдонеро интихоб кун, ки ҳалҳоят дар он ҷо меистанд. Python ва Node.js-ро ӯ худаш ҳангоми зарурат ба он ҷо мегузорад.
  3. 3
    Дар поён рамзи 6-рақамаро ворид кун — он дар равзанаи коннектор навишта шудааст («Рамз барои сайти CodeWithMe»). Агар браузер дар бораи дастрасӣ ба шабакаи маҳаллӣ пурсад — иҷозат деҳ.

Коннектор кушода аст (рамзи манбаъ дар GitHub), танҳо дар компютери ту кор мекунад ва кодро танҳо пас аз ворид кардани рамзи пайвастшавӣ иҷро мекунад.