Array in Javascript con l'AJAX.NET

Introduzione

La Microsoft Ajax Library non si occupa solo di ajax, ma porta grossi miglioramenti al linguaggio. Tanto da farmi superare il vago senso di fastidio che provavo ogni volta che mi toccava usare il JS.
Quello che vediamo oggi sono gli array. Le modifiche applicate lo portano ad assomigliare sempre di più alle Collection server-side se pur con le dovute limitazioni.

In cosa è migliorato?

Questa è la lista dei metodi statici (o shared per i programmatori vb) che troviamo nella classe array.

add Aggiunge un elemento alla fine dell'array.
addRange Aggiunge un gruppo di elementi alla fine dell'array.
clear Svuota l'array.
clone Copia l'array.
contains Controlla se un elemento è stato passato all'array.
dequeue elimina il primo elemento dell'array.
forEach Itera su ogni elemento dell'array
indexOf Restituisce la posizione della prima occorrenza dell'elemento richiesto
insert Inserisce un elemento alla posizione specificata
parse costruisce un oggetto Array partendo dalla sua rappresentazione in formato stringa
remove rimuove la prima occorrenza di un elemento
removeAt rimuove l'elemento alla posizione cercata

 
















Tutti questi metodi sono ovviamente molto utili, ma uno mi ha colpito in modo particolare: forEach.
Questo metodo permette di lavorare in modo simile al server.

Vediamo un po' di codice d'esempio


function pageLoad(){
            var Ar = []; // come dire new Array()
            Array.add(Ar, 1);
            Array.add(Ar, 2);
            Array.add(Ar, 3);
            Array.addRange(Ar, [3,4,5]);
            var resDiv = $get("divResult");
            resDiv.innerHTML = "";           
            var deq = Array.dequeue(Ar);
            if(deq){
                $get("divResult").innerHTML += "dequeued:" + deq + "<br/>";
            }
           
           
            Array.forEach(
                Ar,
                function(item){
                    $get("divResult").innerHTML += item + "<br/>";
                }
            )
        }

Questo codice js viene eseguito all'apertura della pagina lato client e renderizza in un div con id "divResult" il contenuto dell'array. La cosa strana del metodo forEach è il secondo parametro. Avete notato che è una funzione? Questa viene richiamata per ogni elemento presente nell'array passandolo come parametro.

Perché dei metodi statici? Non sono più scomodi?

Sono sicuramente più scomodi. Il problema è che aggiungendo dei metodi "non statici" all'array questi vengono restituiti dal ciclo for/in fra i singoli elementi dell'array.

vediamo un esempio:
        function pageLoad(){
            Array.prototype.scrivi = function(index){alert(this[index]);};
           
            var Ar = new Array;
            Array.addRange(Ar, [1,2,3]);
           
            Ar.scrivi(2);

            $get("divResult").innerHTML= "Ciclo for(;;)<br/>";
            for(var x = 0; x < Ar.length; x++)
            {
               $get("divResult").innerHTML += Ar[x] + "<br/>";
            }
           
            $get("divResult").innerHTML += "Ciclo for/in<br/>";
            for(numero in Ar)
            {
               $get("divResult").innerHTML += numero + "<br/>";
            }

            $get("divResult").innerHTML += "Ciclo forEach<br/>";           
            Array.forEach(
                Ar,
                function(item){
                    $get("divResult").innerHTML += item + "<br/>";
                }
            )
        }

 

Cosa fa quest'esempio?
Aggiunge il metodo scrivi all'array, lo popola e subito dopo prova a lanciarlo.

sfruttando il div del precendete esempio cicliamo con un for(;;) su ar ed il risultato è il seguente:
Ciclo for(;;)
1
2
3

quando però eseguiamo il loop di tipo for/in:
Ciclo for/in
0
1
2
scrivi

il loop for/each restituisce fortunatamente:
Ciclo forEach
1
2
3

Il for/in prende TUTTI gli elementi dell'array, compreso il metodo scrivi.
Rinunciando al for/in potremmo svilupparci una classe collection con metodi non-statici. Forse questa la posterò in un altro articolo.

posted @ sabato 22 dicembre 2007 03:08

Print
«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011