edutecnica

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.