Newsgroup: it.comp.lang.javascript
Titolo: piccola domanda su array e ordinamenti

Salve a tutti, sono nuovo al js, quindi non ridetemi dietro ^^;
Dovrei creare una pagina che acquisisca nome e cognome, data e voto di un
esame per un numero n di studenti, e poi visualizzare il tutto in una
textarea, ordinata, a scelta di chi usa il browser, in base ad ognuno dei
tre campi...
avevo pensato di fare una cosa cosi':
http://digilander.libero.it/DeTullio/Esami_2.html
tuttavia l' ordinamento non fa assolutamente niente...
non potreste darmi una mano?
-- 
char c;main(int argc,char *argv[]){for(c=0;c["]!=^'\0';c++)c=--c/c["];
write(c-~-c,c+++"-B\040e\n",-~c-c))write(-~c-c,c+"-\nyZD_?!_",c-~-c);}

 tuttavia l' ordinamento non fa assolutamente niente...
In verita' mi sono fermato presto perche', a occhio, a parte queste note
dovrebbe piu' o meno funzionare tutto:
- le option non hanno value, quindi non passano nessun valore alle tue
funzioni js, da qui il valore NaN restituito da parseInt: <option
value="10">10</option>
- quando usi parseInt specifica anche il secondo parametro, ovvero la base
numerica su cui stai lavorando per non avere sorprese (o uno di quei bug
difficili da scovare) es: parseInt(numero,10)
- per accedere alle select non mi piace proprio quella sintassi anche se
ormai tutti i browser moderni sembrano accettarla. Per compatibilita':
oggettoForm.nomeSelect.options[oggettoForm.nomeSelect.selectedIndex].value
- la funzione di sort che usi va usata solo per i numeri. In caso di
stringhe non c'e' bisogno di nessuna funzione perche' l'ordinamento
predefinito e' quello alfabetico. A meno che tu non voglia anche quello
inverso basta tuoArray.sort()

 dovrebbe piu' o meno funzionare tutto:
allora, credo di aver sistemato le varie cose che hai detto, e ti
ringrazio per l' aiuto, ma mi rimane ancora un "piccolissimo"
problemino...
se faccio array[1].sort() mi riordina solo un array della matrice, ma non
so come fare per far sistemare tutti gli altri alla corrispettiva
posizione!


 posizione!
Pardon, ovvio. Ho guardato tutto troppo in fretta. Tu hai usato array di
array.
Ti converrebbe usare un array di oggetti le cui proprieta' sono i "campi"
della tabella risultante e una funzione di sort che faccia i dovuti
confronti.

 dovuti confronti.
mi aspettavo una cosa cosi', (una specie di array di record, se ho capito)
solo non ho idea di come farlo
non potresti indicarmi almeno una guida dove trovare queste informazioni?


 non potresti indicarmi almeno una guida dove trovare queste informazioni?
Parti da 
http://devedge.netscape.com
 e, per dovere di praticita' ed altro,
completa con JScript su 
http://msdn.microsoft.com/library
Comunque basta il concetto di oggetto.
Non tiriamo in ballo un oggetto prototipo (fuori da js e' piu' comunemente
chiamato classe), ma pensiamo ad una "struttura", termine preso in prestito
da C# (od altri prima di lui): alla brutta un oggetto con sole proprieta'.
In js puoi inizializzare oggetti semplicemente cosi':
var tuoOggetto={tuoCampo1:"valoreStringa",tuoCampo2:valoreNumerico, ... }
Riempendo l'array di oggetti e' necessaria una funzione da passare al metodo
sort.
Il metodo richiede due parametri, ovvero i valori che deve confrontare di
volta in volta.
E' lento quanto la nostra intelligenza nell'accettare la morte, ma fa il suo
dovere e tutto dipende dal valore restituito.
CopioUndIncollo dalla reference:
If compareFunction is supplied, the array elements are sorted according to
the return value of the compare function. If a and b are two elements being
compared, then:
- If compareFunction(a, b) is less than 0, sort b to a lower index than a.
- If compareFunction(a, b) returns 0, leave a and b unchanged with respect
to each other, but sorted with respect to all different elements.
- If compareFunction(a, b) is greater than 0, sort b to a higher index than
a.
Quindi, come dicevi tu: ogni elemento dell'array e' un "record", ogni riga
della tabella risultante e' un "record". Come ogni cosa ragionata ad oggetti
e' piu' facile, piu' implementabile, piu' comoda, piu' leggibile, piu'
tutto. Se sei attento non sacrifichi neanche prestazioni a causa
dell'astrazione umana, tanto quando hai gia' la possibilita' in mano e' il
compilatore / inteprete a fare il lavoro sporco.

 compilatore / inteprete a fare il lavoro sporco.
ehm... mi sento una larva, ma non c' ho capito molto... comunque ho
provato ad applicare un vecchio algoritmo di ordinamento, e il tutto
dovrebbe funzionare...
http://digilander.libero.it/DeTullio/esami.html


 dovrebbe funzionare...
ZeD, ma ci sei o ci fai?
Non ci hai capito molto?
Hai fatto un array di oggetti come dicevo, solo hai fatto un'oggetto
prototipo e hai riempito la matrice di sue istanze.
Benissimo. Implementa la funzione di sort nell'altra maniera, che seppur
lenta e' piu' veloce che usare un array tampone, ed e' perfetto. Come ti ho
incollato nell'altro post la funzione che passi come parametro al metodo
sort degli array deve semplicemente, detti a e b i termini del confronto,
restituire un numero negativo se b<a, zero se b==a, un numero positivo se
b>a.