Per quanto ne so, non è possibile generare un numero casuale e prendere in conto di un set di esclusione. È necessario creare una funzione ricorsiva per fare il filtraggio per te. Vedi sotto:
function GenerateRandomNumber() {
var min = -13, max = 13;
var random = Math.floor(Math.random() * (max - min + 1)) + min;
// If random number is undesirable, generate a new number, else return
return (random < 4 && random > -4) ? GenerateRandomNumber() : random;
}
var myRandomNumber = GenerateRandomNumber();
Ecco il numero a working fiddle.
Oppure, per gentile concessione @Rozwel, una versione non ricorsiva con un ciclo while:
function GenerateRandomNumber() {
var min = -13, max = 13;
var random = 0;
while (random < 4 && random > -4) {
random = Math.floor(Math.random() * (max - min + 1)) + min;
}
return random;
}
Ecco a jsperf che mette a confronto la risposta accettata con queste due opzioni.
fonte
2012-02-16 12:53:00
I don Penso che sia possibile. Vorrei creare un array con i valori desiderati e accedere in modo casuale all'array –
@EvilP, che convertirà un'operazione di tempo e spazio costante in uno lineare di tempo e spazio. È come aggiungere 100 a un numero aggiungendo 1 cento volte. Funziona, ma è, a dir poco, sconsigliabile. – davin
@davin come funziona l'ora lineare di accesso alla matrice – Esailija