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

Ciao,
avrei la necessità di memorizzarmi in una struttura (array 2 dimensioni) dei 
valori.
Il problema è che mi servirebbe dinamico, ovvero, sicuramente avrò 4 colonne 
mentre le righe potrebbero essere n.
E' possibile quindi creare e valorizzare una matrice di questo tipo, sempre 
tenendo presente che non conosco il numero preciso di righe?
Provo a postare il pezzo di codice, se può aiutare.
La funzione "valorizza" viene chiamata dentro un ciclo da un altra funzione 
e i parametri arrivano.
La funzione "stampaMatrice" , viene chiamata per visualizzare i valori in un 
secondo motivo.
<script language="javascript">
 var vEtichetta = new Array(4);
 var vMatrice = new Array();   // Questa dovrebbe essere con n righe, a 
questo punto non posso sapere il numero delle righe
function valorizza(pInv, pSeg, pInt, tipo, nRec)
 {
   // Assegno Valori
   vEtichetta[1] = pInv;
   vEtichetta[2] = pSeg;
   vEtichetta[3] = pInt;
   vEtichetta[4] = tipo;
   // Creo la matrice e metto vEtichetta dentro ogni cella di vMatrice
   // nRec è la riga "dinamica"
    vMatrice[nRec] = vEtichetta; // Inserisco l'array nell'altro array
 }
function stampaMatrice()
 {
  for (i=0; i<vMatrice.length-1; i++)
  {
       alert(vMatrice[i][1]); // e mi da Errore: 'vMatrice[...].1' è nullo o 
non è un oggetto
  }
 }
</script>
Saluti
Il Riccio 

 mentre le righe potrebbero essere n.
[CUT]
<ipotesi>
Vieni dal mondo basic, vero? :-)
</ipotesi>
E' al contrario il "problema": non è possibile creare array "non dinamici"!
Basta che ti riferisci a un indice dell'array e, se non esiste, viene
creato.
es. var pippo=new Array(); pippo[10]="pluto"; //hai espanso l'array di 11
"celle"...
-- 
"Ti sei salvato
 o sei entrato in banca pure tu?"
									    A.V.

  }
Qui dipende da cosa effettivamente hai messo dentro la matrice. Se hai
commesso lo stesso errore di cui sapra (impostare gli array dall'indice
1 invece che dall'indice 0) allora vMatrice[0] dovrebbe essere
undefined, da qui l'errore.
Prova a fare "alert(typeof vMatrice[0]);" e vedi se trovi "undefined"
oppure "object".
Inoltre se fai "alert(vMatrice);" che cosa ottieni?
Gaetano

> Inoltre se fai "alert(vMatrice);" che cosa ottieni?
ecco..ok , l'errore era proprio dovuto ad una questione di indici...che ho 
sistemato.
Ora mi resta da risolvere l'arcano, in quanto se faccio alert(vMatrice), 
questa mi stampa tutti i record uguali.
Nel senso che mentre lo valorizzo, sembra che vada a sovrascrivere i 
precedenti con i valori dell'ultimo e quindi alla fine mi ritrovo con una 
matrice valorizzata da valori identici.
Riccio 

Mi autorispondo...
ok... era una questione di pulizia dell'Array "vEtichetta", invece di 
metterlo al di fuori della funzione :
<script language="javascript">
var vEtichetta = new Array(4);
var vMatrice = new Array();
function inventa(....);
.....
</script>
va messo all'interno della function inventa, così evidentemente ogni volta 
che viene chiamata la funzione, l'array vEtichetta viene azzerato. Mentre 
quando sta al di fuori, stranamente (in quanto nella funzione poi lo 
rivalorizzavo ogni volta), tiene gli ultimi valori assegnati.
Bene.
un mega grazie a tutti
Saluti da un Riccio 

Riccio wrote:

Mi sembra di aver individuato dove potrebbe essere l'errore nel tuo
codice. Tu utilizzi un unico array vEtichetta, modifichi il suo
contenuto e poi lo inserisci nell'array vMatrice. Quindi alla
fine ottieni che i quattro elementi di vMatrice sono riferimenti
allo stesso oggetto.
Dovresti invece fare qualcosa del tipo:
function valorizza(pInv, pSeg, pInt, tipo, nRec)
  {
    // Creo un nuovo array
    var vEtichetta = new Array();
    // Assegno Valori
    vEtichetta[0] = pInv;
    vEtichetta[1] = pSeg;
    vEtichetta[2] = pInt;
    vEtichetta[3] = tipo;
    // Creo la matrice e metto vEtichetta dentro ogni cella di vMatrice
    // nRec è la riga "dinamica"
     vMatrice[nRec] = vEtichetta; // Inserisco l'array nell'altro array
  }
Gaetano