rango - numeros aleatorios en javascript sin repetir




Generar números aleatorios entre dos números en JavaScript (12)

Math.random()

De la documentación de la Red de Desarrolladores de Math.random() :

// Returns a random integer between min (include) and max (include)

Math.floor(Math.random() * (max - min + 1)) + min;

Ejemplos utiles:

// 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;

¿Hay una manera de generar un número aleatorio en un rango específico (por ejemplo, de 1 a 6: 1, 2, 3, 4, 5 o 6) en JavaScript?


A pesar de muchas respuestas y casi el mismo resultado. Me gustaría añadir mi respuesta y explicar su funcionamiento. Porque es importante entender su funcionamiento en lugar de copiar y pegar un código de línea. Generar números aleatorios no es más que simples matemáticas.

CÓDIGO:

function getR(lower, upper) {

  var percent = (Math.random() * 100);
  // this will return number between 0-99 because Math.random returns decimal number from 0-0.9929292 something like that
  //now you have a percentage, use it find out the number between your INTERVAL :upper-lower 
  var num = ((percent * (upper - lower) / 100));
  //num will now have a number that falls in your INTERVAL simple maths
  num += lower;
  //add lower to make it fall in your INTERVAL
  //but num is still in decimal
  //use Math.floor>downward to its nearest integer you won't get upper value ever
  //use Math.ceil>upward to its nearest integer upper value is possible
  //Math.round>to its nearest integer 2.4>2 2.5>3   both lower and upper value possible
  console.log(Math.floor(num), Math.ceil(num), Math.round(num));
}

En lugar de Math.random() , puede usar crypto.getRandomValues() para generar números aleatorios criptográficamente seguros distribuidos uniformemente. Aquí hay un ejemplo:

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).


Encontré que la solución de Francisc de arriba no incluía el número mínimo o máximo en los resultados, así que lo modifiqué así:

function randomInt(min,max)
{
    return Math.floor(Math.random()*(max-(min+1))+(min+1));
}

Estaba buscando un generador de números aleatorios escrito en TypeScript y escribí esto después de leer todas las respuestas, espero que funcione para los codificadores de TypeScript.

    Rand(min: number, max: number): number {
        return (Math.random() * (max - min + 1) | 0) + min;
    }   

Las matemáticas no son mi punto fuerte, pero he estado trabajando en un proyecto en el que necesitaba generar muchos números aleatorios entre positivo y negativo.

function randomBetween(min, max) {
    if (min < 0) {
        return min + Math.random() * (Math.abs(min)+max);
    }else {
        return min + Math.random() * max;
    }
}

P.ej

randomBetween(-10,15)//or..
randomBetween(10,20)//or...
randomBetween(-200,-100)

Por supuesto, también puede agregar alguna validación para asegurarse de no hacer esto con nada más que números. También asegúrese de que min sea siempre menor o igual que max.


Otras soluciones:

  • (Math.random() * 6 | 0) + 1
  • ~~(Math.random() * 6) + 1

Para crear un número aleatorio en javascript podemos usar el objeto Math incorporado en javascript. El objeto Math tiene una función Math.random() . Esta función hace lo siguiente (fuente MDN):

La función Math.random () devuelve un número pseudoaleatorio de punto flotante en el rango 0–1 (incluido 0, pero no 1) con una distribución aproximadamente uniforme en ese rango, que puede escalar al rango deseado.

Dada esta funcionalidad, podemos escalar esto fácilmente en escenarios más complejos. Por ejemplo:

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))


Siente que necesitas sumar 1 al número máximo, y luego restar el número mínimo para que funcione todo esto, y necesito hacer muchos enteros aleatorios, esta función funciona.

var random = function(max, min) {
    high++;
    return Math.floor((Math.random()) * (max - min)) + min;
};

Esto funciona con números negativos y positivos, y estoy trabajando en decimales para una biblioteca.


jsfiddle: https://jsfiddle.net/cyGwf/477/

Entero aleatorio : para obtener un entero aleatorio entre min y max , use el siguiente 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 punto flotante aleatorio : para obtener un número de punto flotante aleatorio entre min y max , use el siguiente código

function getRandomFloat(min, max) {
  return Math.random() * (max - min) + min;
}

Referencia: 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);
}

Lo que hace "extra" es que permite intervalos aleatorios que no comienzan con 1. Así que puedes obtener un número aleatorio de 10 a 15, por ejemplo. Flexibilidad.





random