codice:
/*
definiamo un nuovo metodo, del tutto inventato,
che permette di mescolare gli elementi di un array
restituendone uno nuovo
per fare questo, aggiungiamo una funzione all'oggetto
prototype della classe Array
*/
Array.prototype.shuffle = function()
{
/*
creiamo innanzitutto un nuovo array
temporaneo, identico all'originale
(lo slice senza argomenti restituisce
una copia identica)
*/
var o = this.slice();
/*
creiamo un nuovo array vuoto, nel quale
mettere gli elementi selezionati a caso
*/
var m = new Array();
/*
recuperiamo e salviamo in una variabile
la lunghezza dell'array originale
*/
var l = o.length;
/*
eseguiamo un loop con tante ripetizioni
quanti sono gli elementi dell'array originale
*/
for(var i = 0; i < l; i++)
{
/*
scomponiamo la riga in una serie
di istruzioni più brevi e più chiare
m.push(o.splice(random(o.length), 1));
*/
/*
prendiamo un numero casuale compreso tra
0 e la lunghezza dell'array: dal momento
che toglieremo, di volta in volta, un
elemento dall'array copia per aggiungerlo
a quello nuovo, la lunghezza di "o" è
sempre minore: quindi, ad esempio, la prima
volta il numero random sarà compreso tra 0 e 9,
la seconda tra 0 e 8, la terza tra 0 e 7 e
così via
*/
var numero_casuale = random(o.length);
/*
estraiamo un elemento dall'array o: il metodo splice
lista.splice(posizione, quanti)
toglie quanti elementi dall'array lista a partire
dall'indice posizione
toglie in questo caso 1 elemento a partire dall'indice
"numero_casuale", cioè quell'elemento il cui indice
è il numero estratto a caso nella riga precedente:
da notare che questo numero, la prossima volta, non
sarà presente nella lista, dato che splice rimuove
l'elemento dall'array "o"
*/
var elemento_estratto = o.splice(numero_casuale, 1);
/*
infiliamo nell'array "m" l'elemento appena estratto
dall'array "o": l'elemento, quindi, viene scelto a
caso, e spostato da un array all'altro
*/
m.push(elemento_estratto);
}
/*
restituiamo l'array appena creato
*/
return m;
};
var originale = ["Zero", "Uno", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette", "Otto"];
var mischiato = originale.shuffle();
trace(originale);
trace(mischiato);