JavaScript Զանգվածներ
Հիմունքներ, Մեթոդներ
JavaScript-ի զանգվածները հզոր գործիք են տվյալների կառավարման համար։ Այս հոդվածը միավորում է հիմնական հասկացությունները, ստեղծման եղանակները, կարևոր մեթոդները և պրակտիկ խորհուրդները՝ օգտագործելով պարզ և առաջադեմ օրինակներ։
let arr1 = []; // Դատարկ զանգված
let arr2 = [1, 'text', true]; // Խառը տիպեր
let numbers = new Array(1, 2, 3); // [1, 2, 3]
let emptyArray = new Array(5); // Ստեղծում է դատարկ զանգված 5 տարրի համար
JavaScript-ում զանգվածները կարող են պարունակել ցանկացած տիպի տվյալ՝
let mixedArray = [
1,
'երկու',
true,
{ name: 'Արամ', age: 30 },
[4, 5, 6]
];
Ստեղծում է զանգված array-like կամ iterable օբյեկտից.
let str = 'hello';
let arr6 = Array.from(str); // ['h', 'e', 'l', 'l', 'o']
Ստեղծում է զանգված արգումենտներից՝ անկախ տիպից.
let arr7 = Array.of(5); // [5] (Ոչ թե [ < 5 empty տարր > ])
Օրինակ. Վերջին տարրի ելքագրում
const fruits = ['խնձոր', 'բանան', 'մանգո'];
console.log(fruits[fruits.length - 1]); // "մանգո"
let fruits = ['apple', 'banana'];
console.log(fruits.length); // 2
fruits.length = 5; // ["apple", "banana", empty × 3]
Խուսափեք բաց թողնված տարրերից.
let sparseArr = [1, , 3]; // Վատ պրակտիկա
Զանգվածները օբյեկտներ են, հետևաբար հղվում են reference -ով․
let arrA = [1, 2];
let arrB = arrA;
arrB.push(3);
console.log(arrA); // [1, 2, 3]
Մեթոդ | Նկարագրություն | Օրինակ |
splice() | Ջնջում/ավելացնում է տարրեր | arr.splice(1, 0, 'x') |
reverse() | Շրջում է զանգվածը | arr.reverse() |
sort() | Դասավորում է տարրերը | arr.sort((a, b) => a - b) |
Մեթոդ | Նկարագրություն | Օրինակ |
concat() | Միավորում է զանգվածներ | arr.concat([4, 5]) |
includes() | Ստուգում է տարրի առկայությունը | arr.includes('apple') |
indexOf() | Տարրի ինդեքսի որոնում | arr.indexOf('banana') |
Մեթոդ | Նկարագրություն | Օրինակ |
find() | Գտնում է առաջին տարրը պայմանով | arr.find(n => n > 2) |
every() | Ստուգում է բոլոր տարրերը | arr.every(n => n > 0) |
flat() | "Պարզեցնում" բազմաչափ զանգվածը | arr.flat(2) |
Մեթոդ | Նկարագրություն | Օրինակ |
push() | Ավելացնում է տարր վերջից | fruits.push('տանձ'); |
pop() | Ջնջում է վերջին տարրը | fruits.pop(); |
unshift() | Ավելացնում է տարր սկզբից | fruits.unshift('դեղձ'); |
shift() | Ջնջում է առաջին տարրը | fruits.shift(); |
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
for (let item of arr) {
console.log(item);
}
arr.forEach((item, index) => {
console.log(index, item);
});
let numbers = [1, 2, 3];
let doubled = numbers.map(n => n * 2); // [2, 4, 6]
let evens = numbers.filter(n => n % 2 === 0); // [2]
let sum = numbers.reduce((acc, curr) => acc + curr, 0); // 6
let phrases = ["Hello world", "Goodbye universe"];
let words = phrases.flatMap(phrase => phrase.split(' ')); // ["Hello", "world", "Goodbye", "universe"]
let [first, second] = [10, 20];
console.log(first); // 10
let arr8 = [1, 2];
let arr9 = [...arr8, 3]; // [1, 2, 3]
let arr10 = new Array(3).fill(0); // [0, 0, 0]
let matrix = [
[1, 2],
[3, 4],
[5, 6]
];
console.log(matrix[1][0]); // 3
let flatMatrix = matrix.flat(); // [1, 2, 3, 4, 5, 6]
Shift/Unshift vs Push/Pop
shift/unshift-ը դանդաղ են մեծ զանգվածների համար (O(n) բարդություն):
// Վատ
arr.unshift(0); // Խուսափեք մեծ զանգվածներում
// Լավ
arr.push(4); // O(1) բարդություն
Խուսափեք Nested Loops-ից
Օգտագործեք Map կամ Set արագ որոնման համար.
let map = new Map(arr.map(item => [item.id, item]));
const colors = ['red', 'blue'];
console.log(Array.isArray(colors)); // true
// Վատ
let copy = arr.slice();
// Լավ (ES6)
let copy = [...arr];
// Ենթադրենք API-ից ստանում ենք զանգված օբյեկտների
let users = [
{ id: 1, name: 'Աննա', age: 25 },
{ id: 2, name: 'Արամ', age: 30 }
];
// Ֆիլտրել 30 տարեկանից մեծ օգտատերերին և ստանալ անունները
let names = users
.filter(user => user.age > 25)
.map(user => user.name);
console.log(names); // ["Արամ"]
let arrA = [1, 2, 3];
let arrB = [3, 4, 5];
let merged = [...new Set([...arrA, ...arrB])]; // [1, 2, 3, 4, 5]