sequencial - sorteio em javascript
Gere um número aleatório entre dois números em JavaScript (12)
Existe uma maneira de gerar um número aleatório em um intervalo especificado (por exemplo, de 1 a 6: 1, 2, 3, 4, 5 ou 6) em JavaScript?
Math.random()
Da documentação da Math.random() Developer Network:
// Returns a random integer between min (include) and max (include)
Math.floor(Math.random() * (max - min + 1)) + min;
Exemplos úteis:
// 0 -> 10
Math.floor(Math.random() * 11);
// 1 -> 10
Math.floor(Math.random() * 10) + 1;
// 5 -> 20
Math.floor(Math.random() * 16) + 5;
// -10 -> (-2)
Math.floor(Math.random() * 9) - 10;
A matemática não é o meu ponto forte, mas tenho trabalhado em um projeto onde precisei gerar muitos números aleatórios entre positivos e negativos.
function randomBetween(min, max) {
if (min < 0) {
return min + Math.random() * (Math.abs(min)+max);
}else {
return min + Math.random() * max;
}
}
Por exemplo
randomBetween(-10,15)//or..
randomBetween(10,20)//or...
randomBetween(-200,-100)
Naturalmente, você também pode adicionar alguma validação para garantir que não faça isso com nada além de números. Também certifique-se de que min é sempre menor ou igual a max.
Em vez de Math.random()
, você pode usar crypto.getRandomValues()
para gerar números aleatórios criptograficamente seguros distribuídos uniformemente. Aqui está um exemplo:
function randInt(min, max) {
var MAX_UINT32 = 0xFFFFFFFF;
var range = max - min;
if (!(range <= MAX_UINT32)) {
throw new Error(
"Range of " + range + " covering " + min + " to " + max + " is > " +
MAX_UINT32 + ".");
} else if (min === max) {
return min;
} else if (!(max > min)) {
throw new Error("max (" + max + ") must be >= min (" + min + ").");
}
// We need to cut off values greater than this to avoid bias in distribution
// over the range.
var maxUnbiased = MAX_UINT32 - ((MAX_UINT32 + 1) % (range + 1));
var rand;
do {
rand = crypto.getRandomValues(new Uint32Array(1))[0];
} while (rand > maxUnbiased);
var offset = rand % (range + 1);
return min + offset;
}
console.log(randInt(-8, 8)); // -2
console.log(randInt(0, 0)); // 0
console.log(randInt(0, 0xFFFFFFFF)); // 944450079
console.log(randInt(-1, 0xFFFFFFFF));
// Uncaught Error: Range of 4294967296 covering -1 to 4294967295 is > 4294967295.
console.log(new Array(24).fill().map(n => randInt(8, 12)));
// [11, 8, 8, 11, 10, 8, 8, 12, 12, 12, 9, 9,
// 11, 8, 11, 8, 8, 8, 11, 9, 10, 12, 9, 11]
console.log(randInt(10, 8));
// Uncaught Error: max (8) must be >= min (10).
Eu encontrei a solução de Francisc acima não incluiu o número mínimo ou máximo nos resultados, então eu alterei assim:
function randomInt(min,max)
{
return Math.floor(Math.random()*(max-(min+1))+(min+1));
}
Eu estava pesquisando gerador de números aleatórios escrito em TypeScript e eu escrevi isso depois de ler todas as respostas, espero que funcionaria para codificadores de TypeScript.
Rand(min: number, max: number): number {
return (Math.random() * (max - min + 1) | 0) + min;
}
Exemplo
Retornar um número aleatório entre 1 e 10:
Math.floor((Math.random() * 10) + 1);
O resultado poderia ser: 3
Tente você mesmo: here
-
ou usando lodash / undescore:
_.random(min, max)
Documentos: - lodash.com/docs#random - Underscore
Outras soluções:
-
(Math.random() * 6 | 0) + 1
-
~~(Math.random() * 6) + 1
Para criar um número aleatório em javascript, podemos usar o objeto Math
javascript. O objeto Math
contém uma função Math.random()
. Esta função faz o seguinte (fonte MDN):
A função Math.random () retorna um número pseudo-aleatório de ponto flutuante no intervalo de 0 a 1 (inclusive 0, mas não 1) com distribuição aproximadamente uniforme sobre esse intervalo - que você pode dimensionar para o intervalo desejado.
Dada essa funcionalidade, podemos facilmente escalar isso em cenários mais complexos. Por exemplo:
function randomNR (x, y){
return Math.round((Math.random() * x + y));
}
// dice >> random number between 1-6
// dice functionality without function >> Math.round((Math.random() * 5 + 1))
console.log(randomNR(5,1));
// coin >> random number between 0-1
// coin functionality without function >> Math.round((Math.random() * 1))
console.log(randomNR(1,0))
Sentir que você precisa adicionar 1 ao número máximo e, em seguida, subtrair o número mínimo para que nada disso funcione, e eu preciso fazer um monte de números inteiros aleatórios, esta função funciona.
var random = function(max, min) {
high++;
return Math.floor((Math.random()) * (max - min)) + min;
};
Isso funciona com números negativos e positivos, e estou trabalhando em decimais para uma biblioteca.
jsfiddle: https://jsfiddle.net/cyGwf/477/
Random Integer : para obter um número inteiro aleatório entre min
e max
, use o seguinte código
function getRandomInteger(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min)) + min;
}
Número de Ponto Flutuante Aleatório : para obter um número de ponto flutuante aleatório entre min
e max
, use o seguinte código
function getRandomFloat(min, max) {
return Math.random() * (max - min) + min;
}
Referência: Math.random()
function random(min, max){
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function randomIntFromInterval(min,max) // min and max included
{
return Math.floor(Math.random()*(max-min+1)+min);
}
O que ele faz "extra" é que ele permite intervalos aleatórios que não começam com 1. Assim, você pode obter um número aleatório de 10 a 15, por exemplo. Flexibilidade.