զանգվածներ (Arrays)

"զանգվածը հզոր գործիք է տվյալները կարգավորված պահելու և արդյունավետ մշակելու համար:"

Element

զանգվածում պահվող արժեքը:

Index

Տարրի դիրքը (սկսած 0-ից):

Length

Տարրերի քանակը (Max Index + 1):

զանգվածները օբյեկտների հատուկ տեսակ են, որոնք նախատեսված են կարգավորված տվյալներ պահելու համար:

Ստեղծում (Literal)

Ամենատարածված ձևը քառակուսի փակագծերի օգտագործումն է:

let fruits = [ "🍎", "🍊", "🍐" ]; // Հագեցած զանգված
let empty = [ ]; // Դատարկ զանգված

Տարրերի հասանելիություն

Զանգվածի տարրերը համարակալվում են 0-ից: Ցանկացած տարրի կարելի է դիմել իր համապատասխան ինդեքսի միջոցով:

fruits[0]; // "🍎" (Առաջին տարր)
fruits[1]; // "🍊" (Երկրորդ տարր)

Տեսակների ազատություն

զանգվածը կարող է պահել ցանկացած տեսակի տվյալ՝ string, number, boolean, object և նույնիսկ այլ զանգվածներ:

let mixed = [ 1, "🍎", true, {id: 1} ];

Տիպի ճշգրիտ ստուգում

console.log(typeof [ ]); // "object" (Ոչ բավարար)
Array.isArray([ ]); // true (Հուսալի)

* Քանի որ JS-ում զանգվածը օբյեկտ է, typeof-ը միշտ կվերադարձնի "object": Ճիշտ ստուգման համար միշտ օգտագործեք Array.isArray():

զանգվածը հիշողության մեջ (Heap) պահվում է որպես օբյեկտ՝ հատուկ ներքին կառուցվածքով, որտեղ length-ը ավտոմատ թարմացվող հատկություն է:

flowchart TD subgraph Container ["Array Object in Heap"] direction LR L["length: 3"] subgraph Arr ["Internal Slots (Indexed)"] direction LR N0["0: '🍎'"] N1["1: '🍊'"] N2["2: '🍐'"] N0 --- N1 --- N2 end end style L fill:#e06c75,color:#000 style Arr fill:none,stroke:#f7df1e style Container fill:#282c34,color:#abb2bf,stroke:#61afef

Վերջից (Արագ)

  • push: Ավելացնում է տարր վերջից.
  • pop: Հեռացնում է վերջին տարրը.

Սկզբից (Դանդաղ)

  • unshift: Ավելացնում է տարր սկզբից.
  • shift: Հեռացնում է առաջին տարրը.

Կոդի Օրինակ (Queue & Stack)

let queue = ["Apple", "Orange"];

// FIFO (First In, First Out) - Հերթ
queue.push("Pear"); // ["Apple", "Orange", "Pear"]
queue.shift(); // հեռացնում է "Apple" -> ["Orange", "Pear"]

let stack = [];
stack.push(1); // [1]
stack.push(2); // [1, 2]
stack.pop(); // հեռացնում է 2 -> [1]
flowchart LR Input((New Item)) subgraph Stack ["Array Structure"] direction LR Head["[0]"] Mid["[1]"] Tail["[n]"] Head <--> Mid <--> Tail end Output((Removed)) Input e_push@-->|push| Tail Tail e_pop@-->|pop| Output Input e_unshift@-->|unshift| Head Head e_shift@-->|shift| Output e_push@{ animate: true } e_pop@{ animate: true } e_unshift@{ animate: true } e_shift@{ animate: true } style Head fill:#ffc500,color:#000 style Tail fill:#ffc500,color:#000 style Input fill:#98c379,color:#000 style Output fill:#e06c75,color:#000 style Stack fill:none,stroke:#3e4451

Ինչո՞ւ է սա կարևոր (Performance Insight)

Արագ (O(1))

push և pop մեթոդները միայն ավելացնում/հեռացնում են տարրը զանգվածի վերջից և թարմացնում length-ը:

Դանդաղ (O(n))

shift և unshift մեթոդների դեպքում JS-ը ստիպված է վերահասցեավորել բոլոր տարրերի ինդեքսները:

for...of ցիկլ

for (let fruit of fruits) {
  console.log(fruit);
}

Ամենապարզ և ժամանակակից ձևը արժեքները ստանալու համար:

length հատկությունը

arr.length-ը միշտ վերադարձնում է վերջին ինդեքսը + 1: Այն կարելի է օգտագործել նաև զանգվածը մաքրելու համար՝ arr.length = 0:

💡 Pro Tip: Եթե ձեռքով փոքրացնեք length-ը, զանգվածը կկրճատվի (տվյալները կջնջվեն անվերադարձ):