Sparse Arrays
Sparse Arrays JavaScript-ում (բացված զանգվածներ)
avaScript-ում զանգվածներն, ինչպես գիտենք, կարող են պահել ցանկացած տեսակ արժեքներ։ Բայց երբեմն դու կարող ես ստեղծել զանգված, որն ունի երկարություն, բայց իրականում չի պարունակում որոշ արժեքներ։
Այսպիսի զանգվածները կոչվում են Sparse Arrays (բացված զանգվածներ)։
Sparse array-ը զանգված է, որի որոշ ինդեքսներ բացակայում են լրիվ։ Այսինքն՝ այդ ինդեքսները չեն պարունակում արժեք և նույնիսկ undefined չեն, այլ պարզապես գոյություն չունեն։
const sparse = [1, , 3]; console.log(sparse[1]); // undefined console.log(1 in sparse); // false → ինդեքսը չկա
Ո՞րն է տարբերությունը undefined-ի և բացակա արժեքի միջև
const a = [undefined]; const b = []; a.length === 1; // true b.length === 0; // true 0 in a; // true → արժեք կա (թեկուզ undefined) 0 in b; // false → արժեք չկա ընդհանրապես
Չնայած sparse[1] վերադարձնում է undefined, դա չի նշանակում, որ արժեք կա։ Իրականում ինդեքս 1-ը ընդհանրապես գոյություն չունի։ Դա է տարբերությունը։
1. Ստորակետերով բաց թողնելով արժեք
const arr = [1, , 3];
2. Ստեղծելով զանգված կոնստրուկտորով
const arr = new Array(5); // arr.length = 5, բայց չկա ոչ մի արժեք
Բայց այս զանգվածը դատարկ է, ոչ թե undefined-ներով լի։
Ստուգենք՝
console.log(arr[0]); // undefined console.log(0 in arr); // false
const a = [undefined]; // 0 ինդեքսում կա undefined արժեք const b = []; // դատարկ զանգված console.log(0 in a); // true console.log(0 in b); // false
եթոդներ որոնք բաց են թողնում բաց ինդեքսները
const arr = [1, , 3]; arr.forEach((val, i) => { console.log(i, val); }); // կտպի միայն 0 և 2 ինդեքսները
Մեթոդներ որոնք կարող են հաշվի առնել բոլոր ինդեքսները
for (let i = 0; i < arr.length; i++) { if (i in arr) { console.log(i, arr[i]); } } // 0 1 // 2 3
// վատ const arr = [1, , 3]; const a = new Array(5); // լավ const arr = [1, undefined, 3]; const a = Array.from({ length: 5 }, () => null);
Sparse arrays-ները փոքրիկ թաքնված խնդիրներ են JavaScript-ում։ Դրանք կարող են թվալ անմեղ, բայց սխալ օգտագործման դեպքում կարող են առաջացնել անսպասելի բագեր ու անարդյունավետություն։ Լավագույն պրակտիկան է՝ միշտ հստակորեն սահմանել բոլոր ինդեքսների արժեքները, նույնիսկ եթե դրանք null կամ undefined են։