Array JavaScript
Un array, in linguaggio JavaScript può essere considerato come una variabile che può contenere molteplici valori ai quali ci si può riferire attraverso un indice: un numero intero che parte sempre da zero.
Un oggetto array può essere istanziato in almeno tre modi
In forma regolare
var T = new Array();
T[0] = 'rossi';
T[1] = 'verdi';
T[2] = 'bianchi';
in forma sintetica
var X=new Array('Andrea ', 'Carlo', 'Marco', 'Sara');
in forma letterale
var V=[5,7,3,9,4];
come si vede dagli esempi, se gli elementi di un array sono stringhe essi
vanno specificati tra apici (o doppi apici).
Un array JavaScript ha lo stesso significato di un vettore in C oppure in
Java; esso viene usato per indicare una struttura di dati omogenei, per
cui da questo momento in poi useremo in modo indifferenziato i due appellativi.
Rispetto ai linguaggi suddetti, un array javascript non deve essere
preventivamente dimensionato: esso può accettare un numero illimitato di elementi;
per questo fatto può essere paragonato a strutture già viste come gli
array dinamici del linguaggio Java.
Quelli appena visti sono degli esempi di caricamento di un array da programma; cioè il vettore viene
allocato ed inizializzato all’avvio dell’esecuzione dello script.
Esiste sempre la possibilità di caricare il vettore a script avviato, quindi, durante la sua esecuzione.
Per eseguire questa operazione è consigliabile usare la funzione push().
qui l’istruzione T.push(n) permette di aggiungere in coda all’array T, il valore numerico inserito nella casella di testo dopo che n è stato validato come numero, attraverso l’istruzione if(!isNaN(n)).
Allo stesso modo è resa possibile la rimozione di un elemento dalla coda dell’array attraverso la funzione pop().
La funzione concat() permette di concatenare il
contenuto di due array.
Praticamente due array verrebbero incollati in modo analogo a quello che
fa l'operatore '+' con le stringhe.
Invece la funzione join() consente di unire tutti gli elementi di un array in un'unica stringa.
La funzione concat() permette di concatenare il
contenuto di due array.
Praticamente due array verrebbero incollati in modo analogo a quello che
fa l'operatore '+' con le stringhe.
in questo scritto, l'array X viene ridotto ad una
stringa tramite la funzione join() ed assegnato ad
una variabile Y che sarà di tipo stringa per definizione;
in output viene stampata la stringa Y con la sua
lunghezza.
In alternativa a .join() si può usare il metodo .toString()
che è equivalente; la differenza è che join() è un
metodo caratteristico per rappresentare un array, mentre .toString()
serve per esternalizzare più genericamente lo stato di un oggetto, sempre
sotto forma di stringa (un array è comunque un oggetto).
Nel seguente listato si illustra la differenza tra i due metodi indexOf() e lastIndexOf().
L'array T è costituito da una sequenza numerica
dove il numero 3 appare due volte: in terza posizione (con indice 2) ed
in sesta posizione (con indice 5); ricordiamo che la prima prima posizione
di un array ha sempre indice 0 in tutti i linguaggi di programmazione (eccetto
che in linguaggio Pascal).
Come si vede indexOf() restituisce la posizione della
prima ricorrenza partendo da sinistra.
Invece lastIndexOf() restituisce sempre l'ultima
ricorrenza incontrata partendo da sinistra dell'argomento specificato.
Come abbiamo visto, quando viene stampato, l'array, si manifesta come una lista di elementi omogenei (dello stesso tipo di dato) e i due metodi push() e pop() hanno la peculiarità di operare sulla parte finale alla lista, aggiungendo o togliendo un elemento in modo conforme al comportamento di uno stack ( o pila: l'ultimo ad entrare è il primo ad uscire). Invece, i due metodi shift() ed unshift() operano in modalità opposta: unshift() aggiunge un elemento in testa all'array mentre shift() toglie l'elemento di testa, come si nota nel seguente esempio dove l'array è costituito e può accettare solo numeri interi.
A tal proposito bisogna aggiungere che shift() rimuove e restituisce il primo elemento, mentre ushift() aggiunge un elemento in testa all'array e restituisce la nuova lunghezza dello stesso. Il metodo unshift( ) permette comunque, di aggiungere più elementi in una sola battuta se, ad esempio, viene usato con una sintassi del tipo:
T.unshift(-2,3);
aggiungerebbe i numeri -2 e 3 in testa all'array.
Le operazioni di ordinamento sono ricondotte all'uso dei due metodi sort() e reverse().
nell'esempio che si vede sopra, viene caricato da programma un generico array che poi viene ordinato con il metodo sort() e da ultimo il vettore viene invertito con reverse(). Dopo ciascuna di queste operazioni il vettore viene stampato.
Bisogna fare attenzione perchè il metodo sort() è
stato creato per manipolare stringhe e caratteri.
Quando nell'array ci sono dei numeri deve essere apportata una correzione
alla sua sintassi attraverso l'introduzione di una funzione di confronto
tra le parentesi del metodo secondo la seguente sintassi:
array.sort(function(a, b){return a-b});
Un metodo molto importante è slice() che accetta un indice di partenza ed uno di arrivo per restituire un array che contiene solo gli elementi compresi tra quelle due posizioni. L'indice di partenza è inclusivo, mentre quello di arrivo è esclusivo.
se non si specifica l'indice di arrivo, slice() carica tutti gli elementi da quello di partenza in poi.
Il metodo splice() è molto potente e viene usato per rimuovere o aggiungere elementi. Con il metodo splice() si ritaglia una parte i un array: gli si passano un indice ed una serie di elementi ed in questo modo il metodo 'muta' il vettore, eliminando tutti gli elementi che vengono dopo la posizione dell'indice passato accettando una sintassi del tipo:
array.splice(index,qta,[elem]);
index = indice di partenza su cui posizionarsi
(inclusivo)
qta = numero di elementi da eliminare a partire da
index
elem = lista opzionale di elementi da aggiungere
Matrici
Con il termine matrice si intende generalmente indicare un array bidimensionale al quale è possibile accedere tramite una coppia di indici, uno per indicare la riga e uno per la colonna. Diversamente da altri linguaggi, dove l'impostazione di questa struttura di dati è molto ben definita, in JS occorre spendere qualche sforzo supplementare di fantasia . Di seguito viene riportato un esempio di istanziazione e di caricamento di una matrice bidimensionale di tre righe e tre colonne, costituita da numeri interi generati casualmente.
come si vede dallo scritto, l'orditura di righe e colonne rimane la stessa
di quella usata in altri linguaggi di programmazione; per la scansione della
struttura si usa sempre un doppio ciclo for; il primo
eseguito sulle righe, con indice i, il secondo sulle
colonne con indice j.
Per gestire matrici rettangolari è possibile agire sulle due variabili rig
e col che rappresentano il massimo numero di righe
e di colonne inserendo all'interno della dichiarazione della matrice T[[],[],.
. .] tante coppie di parentesi quadre corrispondenti al massimo numero
di righe e di colonne.