Arrays
Fins ara les variables guardaven un sol valor. Però sovint necessites guardar-ne molts: una llista de noms, els resultats d'un examen, les compres del dia… Un array és una variable que conté molts valors ordenats, accessibles per la seva posició.
Crear un array
Un array s'escriu amb claudàtors [ ] i els valors separats per comes:
Pots posar dins un array qualsevol tipus de valors: nombres, strings, booleans… i fins i tot mesclar-los, encara que normalment no t'interessa.
Un array buit s'escriu []. És útil per anar-hi afegint coses després:
Accedir als elements per índex
Cada element de l'array té una posició (un índex), que comença a 0 per al primer element. Accedeixes a un element posant l'índex entre claudàtors:
És molt important recordar-ho: la primera posició és la 0, no la 1. Si l'array té 3 elements, les posicions vàlides són 0, 1 i 2.
Què passa si demanes una posició que no existeix? A diferència d'altres llenguatges, JavaScript no peta. Simplement retorna undefined:
La longitud: .length
Tots els arrays tenen una propietat .length que et diu quants elements contenen:
Fixa't que .length no porta parèntesis — és una propietat, no una funció. NO escriguis fruites.length().
Combinant .length amb el que ja saps, pots accedir a l'últim element d'un array sigui quina sigui la seva mida:
Si l'array té 5 elements, fruites.length és 5, i l'últim índex vàlid és 5 - 1 = 4. Per això accedim a la posició fruites.length - 1.
Modificar elements
Pots canviar el valor d'un element posant l'índex a l'esquerra del =:
Sorpresa important: l'array s'ha declarat amb const i tot i així hem pogut modificar-ne un element! Per què no hi ha error?
El motiu és subtil: const bloqueja la variable (no pots fer fruites = [...] per assignar-li un array nou), però no bloqueja el contingut de l'array. És una distinció important. Mira els dos casos:
El primer canvi funciona, el segon dona TypeError. A la pràctica, fes servir const per a la majoria d'arrays — pràcticament mai no necessitaràs reassignar la variable sencera.
Afegir i treure elements: .push() i .pop()
Per afegir un element al final d'un array, fas servir .push():
Per treure l'últim element, fas servir .pop():
.pop() retorna l'element que ha tret, per si vols fer-hi alguna cosa. Si l'array està buit, retorna undefined.
Recórrer un array amb un bucle
La combinació array + bucle és poderosíssima: et permet fer alguna cosa a cada element. La manera més habitual és amb for i un comptador que va de 0 fins a .length - 1:
JavaScript també ofereix una forma més curta quan només necessites els valors i no els índexs: el bucle for...of:
Llegeix-ho: «per cada nota de notes, imprimeix-la». La variable nota pren un valor diferent a cada iteració: primer 7, després 8, etc.
Tria una opció o l'altra segons les teves necessitats:
- Si només et calen els valors, fes servir
for...of. - Si et cal l'índex (per exemple, per modificar elements o accedir a dos arrays alhora), fes servir
forclàssic.
Exemple del segon cas: calcular la suma de totes les notes amb un acumulador:
Tres mètodes útils més
.includes(valor) — diu si l'array conté o no el valor (retorna true o false):
.indexOf(valor) — retorna l'índex on es troba el valor, o -1 si no hi és:
.join(separador) — ajunta tots els elements en un sol string, separats pel que tu vulguis:
.join() és molt útil per imprimir un array de forma agradable, sense els claudàtors i les cometes.
Errors típics
1. Confondre .length amb una funció — recorda que NO porta parèntesis:
Surt TypeError: length és un nombre, no una funció. Has d'escriure arr.length sense parèntesis.
2. Voler accedir a l'últim element com a arr[-1] — això funciona en algunes llengües (Python, per exemple), però no en JavaScript:
L'índex -1 simplement no existeix en JavaScript: retorna undefined.
3. Anar fora dels límits sense adonar-se'n — JavaScript NO et dona error si accedeixes a un índex que no existeix, simplement retorna undefined. Si fas un bucle malament, pots produir sortides estranyes sense entendre per què:
La sortida acaba amb un undefined sospitós. La condició del bucle hauria de ser i < arr.length (estrictament menor), no <=.
Exercici
Suma: 16 Màxim: 10
Hauràs de combinar tot el que has après: arrays, bucles, .push(), Number(prompt(...)), i una mica de lògica per trobar el màxim.
Resum
- Un array conté molts valors ordenats:
const arr = [10, 20, 30];. - S'accedeix per índex, començant a
0:arr[0]. - Un índex fora de rang retorna
undefined(no dona error). arr.lengthés el nombre d'elements (sense parèntesis!).- L'últim element és
arr[arr.length - 1]. arr.push(x)afegeix al final;arr.pop()treu i retorna l'últim.- Per recórrer:
for (let i = 0; i < arr.length; i++)ofor (const x of arr). - Mètodes útils:
.includes(),.indexOf(),.join(). constbloqueja la variable però no el contingut: pots modificar elements i ferpush/pop, però no reassignar tot l'array.