2009-10-04 14 views
5

Learning JS questa settimana.JS: Math.random per array

È possibile utilizzare Math.random per restituire un valore casuale in un array? Questo valore è una stringa e funziona ancora?

risposta

13

È possibile prendere il numero in virgola mobile (compreso tra 0 e 1, non incluso) e convertirlo in un indice nell'array (intero compreso tra 0 e la lunghezza dell'array - 1). Per esempio:

var a = ['a', 'b', 'c', 'd', 'e', 'f']; 
var randomValue = a[Math.floor(a.length * Math.random())]; 
+0

Grazie! Sto usando stringhe di istruzioni piuttosto lunghe in ogni valore di array. C'è un modo per scrivere sintatticamente questo, quindi non è solo una linea molto grande? –

+1

Non importa come si costruisce l'array. La parte importante è 'floor (length_of_the_array * random_value_between_0_and_1)'. –

0

Leggi questo:

var arr = [1, 2, 3, 4, 5, 6]; 
var r = arr[Math.floor(Math.random()*a.length)]; // r will store a value from a pseudo-random position at arr. 
+0

Math.round (Math.random() * a.length) può restituire un numero uguale a a.length, che non è un indice valido per l'array. –

+0

Grazie, è stato corretto. – Rodrigo

2

Sì, questo è davvero possibile. Ecco qualche esempio di codice:

<script> 
    var arr = new Array('a', 'b', 'c', 'd', 'e'); 
    document.write("Test " + arr[Math.floor(Math.random() * ((arr.length - 1) - 0 + 1))]); 
</script> 

noti che Math.floor dovrebbe essere usato al posto del Math.round, al fine di ottenere una distribuzione il numero uniforme.

1

Grazie per tutto il vostro aiuto.

//My array was setup as such. 
var arr = New Array(); 
arr[0]="Long string for value."; 
arr[1]="Another long string."; 
//etc... 

Con il vostro aiuto, e siccome so il numero esatto di valori nel mio array (2), ho appena fatto:

var randomVariable = arr[Math.floor(2*Math.random())] 

Poi uscita randomVariable come vorrei.

Grazie!

+0

Dovresti usare 'arr.length', non' 2'. –

0

È possibile utilizzare questo:

var array = []; 
for(i = 0; i < 6; i++) { 
array[i] = Math.floor(Math.random() * 60); 
} 

se avete bisogno di un numero compreso tra 1 e 100, basta cambiare Math.random() * 60 per Math.random() * 100.