JavaScript/Oggetto Array: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Corretto: "contenente gli"
m Update syntaxhighlight tags - remove use of deprecated <source> tags
 
Riga 12:
== Gli array in JavaScript ==
Come è stato già detto, per creare un vettore in JavaScript facciamo riferimento alla classe Array:
<sourcesyntaxhighlight lang=javascript>var vettore = new Array (); //crea un array vuoto</sourcesyntaxhighlight>
Il costruttore della classe può essere tuttavia usato in maniere differenti:
<sourcesyntaxhighlight lang=javascript>var vettore = new Array (5); //crea un array contenente 5 elementi
var vocali = new Array ("A", "E", "I", "O", "U"); //crea un array contenente le vocali
var lettere_straniere = ["J", "K", "W", "X", "Y"]; //metodo breve
</syntaxhighlight>
</source>
 
Per accedere ad un elemento dell'array, per leggerlo o modificarlo, usiamo la notazione:
<sourcesyntaxhighlight lang=javascript>vettore[indice]</sourcesyntaxhighlight>
Ad esempio, facendo riferimento alla variabile <code>vocali</code>, avremo questa tabella:
{| class="wikitable |
Riga 30:
|}
e potremo lavorare in questo modo:
<sourcesyntaxhighlight lang=javascript>
alert(vocali[0]); //mostra "A"
vocali[1] = "ciao"
alert(vocali[1]); //mostra "ciao"
</syntaxhighlight>
</source>
Da notare che la chiave dell'array è numerica e parte da 0 e che il valore di ciascun elemento può essere di qualsiasi tipo di dato, ciascuno diverso dall'altro.
<br/>Ad esempio, potremmo stabilire un metodo per memorizzare le informazioni su dei prodotti decidendo che all'elemento 0 corrisponde il nome, all'elemento 1 il modello, ecc... creando diversi array:
<sourcesyntaxhighlight lang=javascript>
var descCampi = new Array ("ID", "Modello", "Prezzo")
var prod1 = new Array (1, "3000 plus", 35);
var prod2 = new Array (5, "4000 minus", 12);
</syntaxhighlight>
</source>
 
=== Array associativi? ===
Javascript '''non''' supporta i vettori con indici associativi. Al suo posto si usano gli oggetti. Se si tenta di creare un array associativo, il parser lo interpreta come un oggetto con un indice denominato. Quindi i metodi degli array non funzioneranno in modo corretto.
Ad esempio:
<sourcesyntaxhighlight lang=javascript>
var vet = new Array();
vet["pippo"] = "valore1";
Riga 52:
/* length è una proprietà che si applica solo agli array
con indice numerico, quindi dà un valore errato */
</syntaxhighlight>
</source>
In JavaScript gli array hanno solo indici numerici.
 
=== Array multi-dimensionali ===
Per inizializzare un vettore multi-dimensionale (vettore di vettori) possiamo fare cosi:
<sourcesyntaxhighlight lang=javascript>
var multivettore=new Array(new Array("A1","A2"),new Array("B1","B2"))
alert(multivettore[0][0]); //output: A1
Riga 63:
alert(multivettore[1][0]); //output: B1
alert(multivettore[1][1]); //output: B2
</syntaxhighlight>
</source>
 
== Proprietà ==
Riga 73:
=== concat() ===
Il metodo <code>concat()</code> restituisce un altro array contenente tutti gli elementi dell'array a cui è applicato seguiti da tutti gli elementi dell'array passato come parametro. Ad esempio:
<sourcesyntaxhighlight lang=javascript>
var a = new Array (1, 2, 3);
var b = new Array (4, 5, 6);
var c = a.concat(b); //1, 2, 3, 4, 5, 6
</syntaxhighlight>
</source>
Da notare che <code>a</code> contiene ancora solo gli elementi 1, 2 e 3.
 
=== push() ===
Il metodo <code>push()</code> inserisce l'elemento indicato come parametro come ultimo elemento dell'array e restituisce la nuova lunghezza dell'array. Ad esempio:
<sourcesyntaxhighlight lang=javascript>
var a = new Array (1, 2, 3);
var b = a.push(7);
alert(b); //4
</syntaxhighlight>
</source>
Da notare che l'array <code>a</code> contiene ora gli elementi 1, 2, 3 e 7
 
=== pop() e shift() ===
I metodi <code>pop()</code> e <code>shift()</code> eliminano rispettivamente l'ultimo e il primo elemento dell'array e restituiscono il valore dell'elemento eliminato:
<sourcesyntaxhighlight lang=javascript>
var a = new Array (1, 2, 3);
var b = a.pop(); //ora a contiene 1 e 2
alert(b); //3
</syntaxhighlight>
</source>
 
=== sort() ===
Il metodo <code>sort()</code> ordina l'array secondo l'ordine alfabetico:
<sourcesyntaxhighlight lang="javascript">
var a = new Array ("e", "a", "u", "i", "o");
a.sort() //ora le vocali sono ordinate nell'array a
//attenzione: lavora direttamente sull'array!
</syntaxhighlight>
</source>
Attenzione: in JavaScript le minuscole seguono alle maiuscole, quindi ad esempio
 
<sourcesyntaxhighlight lang="javascript">
var a = new Array ("E", "a", "U", "i", "o");
a.sort() //ora le vocali sono ordinate in questo modo:
//E U a i o!
</syntaxhighlight>
</source>
Per ovviare a questo problema possiamo lavorare su stringhe solo minuscole, usando il metodo <code>toLowerCase</code> in questo modo:
<sourcesyntaxhighlight lang=javascript>
var a = new Array ("E", "a", "U", "i", "o"); //il nostro array
for (var i = 0; i < a.length; i++) { //itera sui singoli elementi...
a[i] = a[i].toLowerCase(); //...rendendoli minuscoli
}
</syntaxhighlight>
</source>
 
=== reverse() ===
Questo metodo agisce sull'array invertendo l'ordine degli elementi in esso contenuti. Ad esempio:
<sourcesyntaxhighlight lang=javascript>var vocali = new Array ("A", "E", "I", "O", "U");
vocali.reverse(); //ora contiene U O I E A
</syntaxhighlight>
</source>
 
=== slice() ===
Il metodo <code>slice()</code>, infine, serve per copiare porzioni di array. La sua sintassi è:
<sourcesyntaxhighlight lang=javascript>arr.slice(a, b)</sourcesyntaxhighlight>
Il metodo restituisce un array contenente gli elementi di <code>arr</code> compresi tra <code>a</code> (incluso) e <code>b</code> (escluso). Se <code>b</code> non è indicato, vengono copiati tutti gli elementi a partire da <code>a</code> fino alla fine. Ad esempio:
<sourcesyntaxhighlight lang=javascript>var a = new Array ("A", "E", "I", "O", "U");
var b = a.slice(1,4); //b contiene gli elementi E I O
</syntaxhighlight>
</source>
 
== Iterare sugli elementi di un array ==
Come abbiamo visto [[JavaScript/Iterazione|precedentemente]], è possibile iterare su tutti gli elementi di un array con un ciclo particolare; ad esempio, volendo azzerare il valore di tutti gli elementi di un array, possiamo usare il codice:
<sourcesyntaxhighlight lang=javascript>
var a = new Array ("A", "E", "I", "O", "U");
for (indice in a) {
Riga 141:
}
//ora l'array contiene 5 elementi tutti vuoti
</syntaxhighlight>
</source>
 
=== Cercare un elemento in un array ===
Di seguito è mostrata a titolo di esempio una funzione <code>arrayIndexOf()</code> che restituisce la posizione di un elemento dato in un array. Nel caso l'elemento non sia presente, restituisce -1.
<sourcesyntaxhighlight lang=javascript>
function arrayIndexOf(array, search) {
var indice; //contatore
Riga 154:
return -1;
}
</syntaxhighlight>
</source>
 
Il ciclo scorre su tutti gli elementi dell'array: se l'elemento corrente corrisponde a quello cercato (<code>array[indice] == search</code>) la funzione esce restituendo come valore l'indice corrente (<code>return indice;</code>). L'ultima istruzione (<code>return -1;</code>) verrà quindi eseguita se non verrà trovata nessuna corrispondenza nell'array (che è quindi il risultato che si voleva ottenere). La funzione presentate è una ricerca lineare, nel caso di array ordinati si può utilizzare anche l'algoritmo di ricerca binaria.