Newsgroup: it.comp.lang.javascript
Titolo: Lunghezza di array associativi

Prendiamo questo codice:
var arrayasso = new Array();
arrayasso[8] = "elemento";
alert(arrayasso[8]);
alert(arrayasso.length);
Con il primo alert ovviamento ottengo la stringa "elemento".
Con il secondo, quello che stampo è la lunghezza dell'array (in questo
esempio 9).
Gli elementi da 0 a 7 sono indefiniti, quello con indice 8 è uguale a
"elemento".
Se modifico il codice come segue:
var arrayasso = new Array();
arrayasso["stringa"] = "elemento";
alert(arrayasso["stringa"]);
alert(arrayasso.length);
Con il primo alert ottengo la stringa "elemento", mentre come lunghezza
dell'array ottengo zero (anche se evidentemente l'array ha un solo
elemento).
Riassumento come faccio a ottenere la lunghezza di un array associativo ?
Come faccio a scorrerlo?
Ciao
--Gabriele

 Come faccio a scorrerlo?
Ad esempio con un ciclo for...in:
for(var prop in tuoArray)
    document.write(prop+" "+tuoArray[prop]+"<br>";
Un qualcosa di utile pero' puoi farlo mentre lo riempi:
    tuoArray["pippo"]=tuoArray[tuoArray.length]="pluto";
Cosi' metti nell'elemento "n" un riferimento alla proprieta' "pippo"
dell'oggetto stesso.
Ottieni una corrispondenza numerica con gli indici e puoi scorrerlo al
solito modo.

 Come faccio a scorrerlo?
Partiamo dal presupposto che gli "array associativi" in realta' non 
esistono in Javascript. Diciamocelo chiaro e tondo, e' tutta una grande 
burla. :)
Tu non fai altro che aggiungere una proprieta' ad un oggetto, che - 
guarda caso - e' di tipo Array.
In JS tu puoi aggiungere/leggere/accedere alle proprieta' di un oggetto 
nei seguenti modi:
myobject.myproperty
o
myobject["myproperty"]
Nella maggior parte dei casi, se hai bisogno di un array associativo ti 
basta, e ti conviene, realizzare un oggetto neutro ex novo:
var myobject={};
myobject["firstlabel"]="value";
myobject["secondlabel"]="another value";
etc.
e poi iteri con:
for (var i in myobject)
	alert("key:" +i+"\nvalue:"+myobject[i]);
In questo modo eviti di tirarti dietro tutto l'oggetto array con i suoi 
metodi e proprieta' che, in molti casi di "array associativi", diventano 
completamente inutili.
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 alert("key:" +i+"\nvalue:"+myobject[i]);
Grazie mille per l'aiuto.

 Grazie mille per l'aiuto.
Da notare che questo metodo di iterazione funziona su tutti gli 
oggetti.. prova ad esempio a iterare un oggetto window, o navigator, o 
qualsivoglia oggetto di cui puoi ottenere un riferimento. :)
il for .. in e' un ciclo utilissimo. Puoi trovare maggiori delucidazioni 
sulla reference di JS sul sito della netscape.
Volendo, per tornare al discorso degli "array associativi", potresti 
svilupparti ad "hoc" un oggetto tuo adatto alle tue esigenze.
Dove implementare metodi per iterare l'oggetto, ricavarne il numero di 
elementi, etc. Un po' come l'oggetto Dictionary su JScript.
Avendo modo di usare i getter e setter, tra l'altro, su JS1.5 potrebbe 
venir fuori qualcosa di davvero interessante.
P.S.
Poi mi spiegherai cos'e' che stai sviluppando su Mozilla, un giorno.. :)


 Poi mi spiegherai cos'e' che stai sviluppando su Mozilla, un giorno.. :)
Verso fine anno va bene? :)

 Verso fine anno va bene? :)
Alla faccia, mi pare un po' troppo in la'.. :D
.. Dici cosi' perche' forse e' uno di quei progetti in cui rischi che ti 
rubino l'idea, o altro? In tal caso, posso capire..
