Newsgroup: it.comp.lang.javascript
Titolo: numero più grande o più piccolo

Buongiorno a tutto il gruppo. 
Mi piacerebbe sapere se in JavaScript esiste un metodo che scelga il
numero piů basso o il numero piů alto di una serie di numeri. Non so
se usate excel, se lo usate come GRANDE e PICCOLO di quel programma.
Per esempio, io ho 5, 10 , 2, 4, e voglio trovare il 2, cioč il piů
piccolo.
Forse se quel metodo esiste i numeri devono fare parte di un Array. Mi
sbaglio?
grazie tante
attilio

 Li metti in un array
 fai un sort
 leggi il primo valore
Ho perň qualche dubbio sul sort (non vorrei li consideri stringhe, mai
provato)


Sě, li considererebbe stringhe. Bisogna scrivere una funzione di
ordinamento, in questo caso molto banale.
function compNum(a,b){return a - b}
var arr=[5,10,2,4];
arr.sort(compNum);
Cosě il piů basso sta all'indice 0. Per l'ordinamento contrario: return b-a.

 arr.sort(compNum);
Se vi sono solo pochi elementi da ordinare va bene cosě. Perň il sort del
js, non so quale algoritmo usi, sembra molto ma molto lento. Forse
converrebbe riscrivere un buon quicksort.
In ogni caso non riesco a capire il motivo per cui sia conveniente fare un
sort quando si puň fare con una funzione apposita, piů veloce di qualsiasi
sort e che non altera l'ordine dell'array:
    function Max(a) {
        var imax = a[0];
        for (var i = 1; i < a.length; i++)
            if (a[i] > imax)
                imax = a[i];
        return imax;
    }
Maurizio.

         return imax;
questo non capisco a cosa serve, forse è un modo che gli informatici
usano per qualcosa di preciso, ma vedo che togliendolo e scrivendo
alert(imax) tutto torna bene.
Se il mio ragionamento è corretto ho capito una cosa. Con la semplice
modifica
    if (a[i] < imax) cioè 'minore di' al posto di 'maggiore di'
ottengo il numero più basso della serie.
Sapeste che fatica! Spero di avercela fatta :-)))
Se  vi fa voglia di rispondermi poi vi faccio altre domande. Spero di
non rompere troppo, grazie tante.
attilio

 Sapeste che fatica! Spero di avercela fatta :-)))
Mi sa che tu ce l'abbia proprio fatta :)  Ovviamente l'ultima parola va
ai tuoi precedenti interlocutori (sia per un'ulteriore conferma sia per
rispondere ai dubbi sulla terminologia; sono piů adatti loro di me). 
Io ti dň un piccolo consiglio che non attiene all'argomento trattato, ma
che in futuro puň comunque esserti utile: evita vocali accentate nel
subject; come vedi le "ů" hanno cambiato "look" :) 
Anch'io mi concedo uno strappo alla netiquette usandole nel corpo del
messaggio[*], ma non nell'oggetto. Lě, se per qualche motivo vengono
sostituite da simboli strani, spezzano il thread.
[*] Ho dovuto farlo: la sistematica sostituzione accenti->apostrofi mi
stava procurando seri problemi sul lavoro, affioravano via via
preoccupanti dubbi ortografici ai quali ho preferito rinunciare :-)
Ciao Attilio, buon proseguimento.
-- 
mailto: y = i
----------------------------------------
Vivo nel terrore di non essere frainteso 
(Oscar Wilde)

 alert(imax) tutto torna bene.
evidentemente hai messo alert(imax) all'interno della funzione Max. imax è
una variabile locale e come tale è definita solo all'interno della funzione.
Se leggi la variabile al di fuori della funzione ti verrà riportato un
errore. Potresti definire imax come variabile globale (togliendo il var
prima della sua dichiarazione) e così potrai leggerla anche all'esterno; ma
te lo sconsiglio, non mi sembrerebbe un buon modo di programmare perché
aumenta la probabilità di errori e di sviste. Però anche in questo modo Max
riporterà sempre "undefined".
Maurizio.

 sort e che non altera l'ordine dell'array:
Questo č proprio uno dei pochi casi dove una nostra funzione riesce ad
essere decisamente piů veloce di una "core" del linguaggio.
E questa volta viene davvero da chiedersi come cavolo hanno scritto quel
metodo...


...e visto che parliamo di ottimizzazione buttiamoci alle spalle quell'array
che occupa memoria e basta...
function maxVal(){
    for(var i=0,n=null;i<arguments.length;i++)
        if(arguments[i]>n)
            n=arguments[i];
    return n;
}
Ciao