Newsgroup: it.comp.lang.javascript
Titolo: Array JS

Ciao.
Ho appena fatto una scoperta che mi ha sconvolto la vita...
Ho scritto questo semplice codice di test (vedi in fondo) e... funziona!
(sia su IE 6.0 che su Mozilla 1.3)
Insomma sembra che non sia indispensabile un numero come indice degli
elementi di un array (come fa' php!).
Qualcuno sa' dirmi se č proprio cosě? (nei docs che ho letto io sembra che
l'idice di un array debba essere un numero)
Comunque torno a ripetere che il tutto sembra funzionare a parte l'attributo
length che va' in pappa...
Mi sto' imbattendo in un uso improprio degli array? O č invece un uso
lecito? C'č scritto da qualche parte che si possono usare anche cosě?
Grazie
<html>
<head>
<SCRIPT LANGUAGE="JavaScript">
function Test() {
var laMom;
    laMom=new Array();
    laMom[-1]='10';
    laMom[0]='11';
    laMom[1]='12';
    laMom[10]='12';
    laMom["a"]='mah';
    alert(laMom["a"]);
    alert(laMom[1]);
    alert(laMom["1"]);
    alert(laMom.length);
}
</SCRIPT>
</head>
<body>
<INPUT TYPE="BUTTON" VALUE="Test" ONCLICK="Test();">
</body>
</html>

 lecito? C'č scritto da qualche parte che si possono usare anche cosě?
E' un utilizzo piů che lecito:-)
In JavaScript puoi utilizzare gli array come array associativi. Ad esempio:
var dizionario = new Array();
dizionario["acqua"] = "water";
dizionario["fuoco"] = "fire";
alert('In Inglese "acqua" si scrive "' + dizionario["acqua"] + '"');
Gaetano

Stupendo...
Però sorge un problema: come faccio a risalire alle chiavi dell'array?
In altre parole come faccio a sapere quali chiavi interpellare per avere
tutti gli elementi di un array di questo tipo?
Mi puoi consigliare su dove trovare informazioni a riguardo?
Grazie


     laMom["a"]='mah';
Qui tu non stai settando un indice di un array, ma una sua proprieta'.
Per questo non viene conteggiata, in quanto non e' un elemento.
Infatti:
laMom["a"]='mah';
alert(laMom.a);
-- 
C'ya,
ZER0
  :. job profile - coder.gfxer.webDesigner
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 In JavaScript puoi utilizzare gli array come array associativi.
Come ho scritto in un vecchio post, in realta', gli array associativi 
in JS non esistono, sono una grande burla. :)
Proprio per natura di JS.. In quanto sono proprieta'.
Se devo crearmi un cosiddetto "array associativo" e' piu' conveniente 
crearsi un oggetto ex-novo senza portarmi dietro tutto il malloppone di 
metodi e proprieta' di un costrutto array, in quanto nel 90% dei casi 
non mi serve a niente (i metodi e proprieta' nativi dell'oggetto Array 
generalmente funzionano sugli elementi indicizzati, non sulle 
proprieta' aggiuntive.. vedi length, per esempio).


 tutti gli elementi di un array di questo tipo?
Se ti sei costruito un array di questo tipo, SAI che valori hai imesso. 
:)
Ad esempio, seguendo il discorso del dizionario, puoi far immettere 
all'utente un valore in un textbox, poi:
if (typeof dizionario[textBoxValue]=="undefined")
	alert("Spiacente, ma la parola inserita non e' presente nel 
dizionario")
else
	alert('In inglese "'+textBoxValue+'" si scrive "'+dizionario
[textBoxValue]+'".');
Cmq sia e' lecito voler iterare tali valori. Lo fai tramite il ciclo 
for..in:
for (var i in myobject){
	alert(i+"="+myobject[i])
}
Che ti itera appunto tutte le proprieta' di un oggetto.
http://devedge.netscape.com/library/manuals/2000/javascript/1.3/referen
ce/stmt.html#1004815
Prova a fare lo stesso ciclo settando myobject=navigator o window :)


 crearsi un oggetto ex-novo [...]
sě, infatti per l'esempio che facevo io era sufficiente utilizzare Object:
var dizionario = new Object();
...
In questo caso la scelta "new Array()" era semplicemente decorativa:-)
Per quanto riguarda la questione "array associativo" o non "array 
associativo", semplicemente in JavaScript gli oggetti sono *anche* degli 
array associativi, o hash map, come si desidera chiamarli. Quindi per 
fare quello che in altri linguaggi richiederebbe l'utilizzo di strumenti 
piů specifici, ad esempio in Java con HashMap, in JavaScript basta un 
semplicissimo oggetto!
Ad esempio vedi:
A Survey of the JavaScript Programming Language
http://www.crockford.com/javascript/survey.html
alla parte "Objects" oppure:
Objects as associative arrays
http://www.xs4all.nl/~ppk/js/associative.html
Gaetano

Giusto...
Grazie ZER0, soluzione troppo ovvia, non ci avevo pensato; se sapessi su che
razza di specchi mi stavo arrampicando!!!
Grazie ancora, ciao!

Grazie per i link... sembrano interessanti...
Non conoscevo JavaScript sotto questo punto di vista, o meglio lo conoscevo
ma non avevo individuato che gli array associativi erano proprietà (quindi
associabili a qualsiasi oggetto, ...)
Grazie ancora, ciao.

 array associativi, o hash map, come si desidera chiamarli.
No, non sono d'accordo. Che si vogliano chiamare "array associativi" o 
"hash map" per similitudine ad altri linguaggi, si puo' anche capire.
Ma un conto e' dire che lo "sono" (con "anche" o senza).
In JS gli oggetti non sono affatto array associativi. Semplicemente, vi 
sono due modi con la quale richiamare una proprieta' in un oggetto: La 
"dot notation" e la "square bracket notation".
Non confondiamo una notazione, quindi, con un tipo di oggetti.


 Non confondiamo una notazione, quindi, con un tipo di oggetti.
Nel documento che avevo accennato, che si trova all'indirizzo:
http://www.crockford.com/javascript/survey.html
si legge: "objects and hashtables are the same thing". Comunque il punto 
secondo me è questo. A me serve una hashtable. In Java farei:
Map map = new HashMap();
in VBScript farei:
dictionary = Server.CreateObject("Scripting.Dictionary")
In JavaScript invece non mi serve nessuno strumento aggiuntivo. Gli 
oggetti bastano e avanzano:
var obj = new Object();
obj.key = "value"; // del tutto equivalente a obj["key"] = "value";
Per cui tutte le volte che mi serve una mappa fra chiavi e valori mi 
basta utilizzare un semplice oggetto.
Gaetano

 oggetti bastano e avanzano.
Certo, l'importante e' non confondere le cose.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)
"Women can use sex to get what they want. Men cannot, as 
sex is what they want." (Kelly,UK)