Массивҳо
Ин барои чӣ лозим аст
Рӯйхати харид, баҳоҳо дар чоряк, паёмҳо дар чат, молҳо дар мағоза — додаҳо аксар вақт бисёр ва якхела
мебошанд. Сохтани тағйирёбандаҳои 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 дарозтар кор
мекунанд: ба ҳамаи унсурҳои дигар рақамҳоро иваз кардан лозим меояд. Дар массивҳои калон ин намоён аст.
Хатоҳои маъмул
- Индекс аз як. Унсури аввал —
arr[0], наarr[1]. - Берун рафтан аз ҳудуд.
arr[arr.length]— инundefinedаст. Охирин —arr[arr.length - 1]. - «Нусха» бо
=.const copy = arr— ҳамон массив аст. Лозим аст[...arr]. - Массиви вурудиро вайрон карданд. Агар функсия бояд массиви нав баргардонад, дар аслӣ
push,pop,reverse,sort,splice-ро даъват накунед — онҳо аслиро иваз мекунанд. - Муқоиса бо
===.[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(", ") |