Array-uri
Crearea unui array și obiectul Array
Pentru a stoca un set de date în limbajul JavaScript, sunt destinate array-urile. Array-urile în JavaScript sunt reprezentate de obiectul Array. Obiectul Array oferă o serie de proprietăți și metode prin care putem gestiona array-ul și elementele sale.
Crearea unui array
Se poate crea un array gol folosind paranteze pătrate sau constructorul Array:
const users = new Array();
const people = [];
console.log(users); // Array[0]
console.log(people); // Array[0]
Se poate inițializa imediat un array cu un anumit număr de elemente:
const users = new Array("Tom", "Bill", "Alice");
const people = ["Sam", "John", "Kate"];
console.log(users); // ["Tom", "Bill", "Alice"]
console.log(people); // ["Sam", "John", "Kate"]
Se poate defini un array și să se adauge noi elemente pe parcurs:
const users = [];
users[1] = "Tom";
users[2] = "Kate";
console.log(users[1]); // "Tom"
console.log(users[0]); // undefined
În acest caz, nu contează că array-ul se creează inițial cu o lungime de zero. Cu ajutorul indicilor, putem atribui un anumit element la un index specific în array.
Un alt mod de a inițializa array-uri este prin intermediul metodei Array.of() - aceasta primește elemente și le folosește pentru a inițializa array-ul:
const people = Array.of("Tom", "Bob", "Sam");
console.log(people); // ["Tom", "Bob", "Sam"]
Array.from
Și încă o modalitate o reprezintă funcția Array.from(). Aceasta are mai multe variante, să analizăm cele mai comune:
Array.from(arrayLike)
Array.from(arrayLike, function mapFn(element) { ... })
Array.from(arrayLike, function mapFn(element, index) { ... })
Ca prim parametru, funcția acceptă un obiect numit "arrayLike", care, în mod condiționat, este "asemănător cu un array", adică poate fi reprezentat sub formă de set de elemente. Acesta poate fi un alt array, poate fi și un șir de caractere, care, practic, furnizează un set de caractere. În general, orice set de elemente care poate fi transformat într-un array. De asemenea, poate fi un obiect în care este definită proprietatea length.
De exemplu:
const array = Array.from("Hello");
console.log(array); // ["H", "e", "l", "l", "o"]
În acest caz, în funcție este transmis un șir și este returnat un array, fiecare element al căruia furnizează unul dintre caracterele din acest șir.
Ca al doilea parametru, este transmisă o funcție de transformare, care prin primul său parametru primește elementul curent al setului și returnează un rezultat al transformării sale. De exemplu:
const numbers = [1, 2, 3, 4];
const array = Array.from(numbers, n => n * n);
console.log(array); // [1, 4, 9, 16]
În acest caz, în funcția Array.from() este transmis un array de numere. Al doilea parametru - funcția (în acest caz, un lambda expression) rulează pentru fiecare număr din acest array și primește acel număr prin parametrul n. În interiorul expresiei lambda, se întoarce pătratul acelui număr. În final, Array.from() va returna un nou array în care vor fi pătratele numerelor din array-ul numbers.
Și încă o versiune a funcției Array.from() în calitate de al doilea parametru acceptă o funcție de transformare, în care, pe lângă elementul din setul iterabil, se transmite și indexul acestui element:
Array.from(arrayLike, function mapFn(element, index) { ... })
Folosim această versiune și transmitem în funcție un obiect cu proprietatea length:
const array = Array.from({length:3}, (element, index) => {
console.log(element); // undefined
return index;
});
console.log(array); // [0, 1, 2]
Aici este transmis în funcție un obiect cu proprietatea length setată la 3. Pentru funcția Array.from, acesta este un semnal că array-ul returnat ar trebui să aibă trei elemente. Este destul de neimportant faptul că funcția de transformare din al doilea parametru primește un element din set (parametrul element) - în acest caz, acesta va fi întotdeauna indefinit.
Cu toate acestea, valoarea length: 3 va indica faptul că array-ul returnat va avea trei elemente cu indici de la 0 la 2. Și prin intermediul celui de-al doilea parametru al funcției de transformare - parametrul index - putem obține indexul curent al elementului.
Cu toate acestea, putem transmite un obiect în care numele proprietăților sunt indici. În acest caz, obiectul se va transforma într-un obiect asemănător cu un array, care poate fi iterat:
const array = Array.from({length:3, "0": "Tom", "1": "Sam", "2": "Bob"}, (element) => {
console.log(element);
return element;
});
console.log(array); // ["Tom", "Sam", "Bob"]
length
Pentru a afla lungimea unui array, se folosește proprietatea length:
Const fructe = [];
fructe[0] = "mere";
fructe[1] = "pere";
fructe[2] = "prune";
console.log("În array-ul fructe există ", fructe.length, " element(e)");
for(let i=0; i < fructe.length; i++)
console.log(fructe[i]);
În realitate, lungimea array-ului va fi indicele ultimului element plus unu. De exemplu:
const users = []; // în array sunt 0 elemente
users[0] = "Tom";
users[1] = "Kate";
users[4] = "Sam";
for(let i=0; i<users.length;i++)
console.log(users[i]);
Afișaj în browser: Tom Kate undefined undefined Sam
În ciuda faptului că nu am adăugat elemente pentru indexurile 2 și 3, lungimea array-ului în acest caz va fi 5. Doar elementele cu indexurile 2 și 3 vor avea valoarea undefined.