Categorie
JavaScript

Numeri min/max all’interno di un array JavaScript

Trovare il numero più piccolo o più grande all’interno di una matrice JavasScript potrebbe essere un problema non di poco conto.
Difatti il linguaggio non ci offre nessun metodo nativo per eseguire questa operazione. Ciò significa che ci dobbiamo arrangiare da soli e crearci il nostro metodo personale.

A prima vista, la soluzione che può balzare agli occhi, è quella di scorrere l’array alla ricerca del valore corretto.
Ma noi vogliamo scrivere codice intelligente, che sia quindi in primo luogo performante oltre ad essere breve; ed abbiamo un asso nella manica.

Call ed  apply

JavaScript fornisce due metodi (call() ed apply()), per ogni funzione, che possono essere utilizzati per chiamare la funzione, definire il suo contesto, e specificare i suoi argomenti in entrata. In pratica questi due metodi ci permettono di modificare il contesto di funzione.
Ora in questo articolo non ci interessa andare nel dettaglio su questi metodi nè tantomeno sul concetto di contesto di funzione (di cui comunque parleremo il prima possibile).
Ma ci basti sapere che i due metodi sono molto simili tra loro riguardo a come vengono usati, ma con una distinzione: il modo in cui sono impostati gli argomenti.
Semplicemente, call() passa gli argomenti singolarmente mentre apply() passa in argomenti come un array.

La soluzione

I metodi Math.min() e Math.max() sono in grado di assumere un numero qualsiasi di argomenti e di trovare i valori appropriati.
Ora che sappiamo questo proviamo a ragionare…. E se applicassimo il metodo apply() su uno di questi due metodi?
Ma certo, saremmo in grado di trovare il valore più piccolo, o grande, all’interno di un array, in un colpo solo. Vediamo:

function minimo(ary) {
  return Math.min.apply(Math, ary);
}

function massimo(ary) {
  return Math.max.apply(Math, ary);
}

document.write(minimo([0, 1, 2, 3])+"
"); document.write(massimo([0, 1, 2, 3]));

Da notare che abbiamo specificato il contesto ad essere l’oggetto Math (il primo parametro dei metodi call() ed apply() è il contesto di funzione).
Questo non è necessario, i metodi minimo e massimo continueranno a lavorare indipendentemente da ciò che viene passato come contesto.

2 risposte su “Numeri min/max all’interno di un array JavaScript”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.