¿Cómo puedo crear una matriz con 40 elementos, con valores aleatorios de 0 a 39? Me gusta
[4, 23, 7, 39, 19, 0, 9, 14, ...]
Intenté usar soluciones desde aquí:
http://freewebdesigntutorials.com/javaScriptTutorials/jsArrayObject/randomizeArrayElements.htm
pero la matriz que obtengo es muy poco aleatoria. Genera muchos bloques de números sucesivos ...
javascript
arrays
random
Alexandra
fuente
fuente
fuente
[...Array(40)].map(_=>Math.ceil(Math.random()*40));
serían 11 caracteres menos que los suyos y 7 menos que el original.Math.ceil
, aunque cortamos 0 como una opción. Si podemos aceptar 1-40 en lugar de 0-39, esto funciona. De lo contrario , reducir un carácter de mejora para volver aMath.floor
)ES5:
ES6:
fuente
_
yi
? innecesario en ES6 a menos que me equivoque._
es el elemento actual yi
es el índice actual. Tienes razón, son innecesarios en ambos casos. Puede eliminarlos si lo desea.Enfoque ES6 aún más corto:
Además, podría tener una función con argumentos:
fuente
.fill()
sin ningún parámetro, se llenará la matrizundefined
, que es lo único que se necesita aquí para.map()
que funcioneMás corto :-)
[...Array(40)].map(e=>~~(Math.random()*40))
fuente
~~
es la abreviatura de Math.floor~~
taquigrafía? (editar: ahh, es solo un operador bit a bit , ya veo)Math.random()
devolverá un número entre 0 y 1 (exclusivo). Entonces, si quiere 0-40, puede multiplicarlo por 40, el resultado más alto que puede ser es por lo que está multiplicando.http://jsfiddle.net/robert/tUW89/
fuente
Las secuencias de elementos aleatorios a menudo contienen bloques de números sucesivos, consulte la falacia del jugador . Por ejemplo:
fuente
limitó la matriz a 6 valores para que sea fácil de ver.
fuente
Dado que el rango de números está restringido, yo diría que lo mejor que se puede hacer es generar la matriz, llenarla con números del cero al 39 (en orden) y luego mezclarla.
fuente
Math.random()
40 veces, ya que hará cumplir cada número que aparece una vez y no se repite.Esta es la forma tradicional de hacerlo, pero segundo @Pointy y @Phrogz si desea evitar duplicados en su matriz sin tener que hacer cálculos costosos
fuente
Quirk soluciones de una sola línea todos los días.
Los valores en las matrices son totalmente aleatorios, por lo que cuando utilice estos fragmentos, será diferente.
Una matriz (longitud 10) con caracteres aleatorios en minúsculas
Una matriz (longitud 10) con números enteros aleatorios del 0 al 99
Una matriz de fechas aleatorias (desde hace 10 años hasta ahora)
Una matriz (longitud 10) cadenas aleatorias
Otras cosas útiles que puede encontrar aquí https://github.com/setivolkylany/nodejs-utils/blob/master/utils/faker.js
fuente
Usando algunas características nuevas de ES6, esto ahora se puede lograr usando:
Tenga en cuenta que esta solución solo funcionará en navegadores modernos que admitan estas características de ES6: funciones de flecha y Array.from ().
fuente
Consulte a continuación: -
fuente
de la página sugerida por @Phrogz
fuente
Necesitaba algo un poco diferente a lo que ofrecían estas soluciones, ya que necesitaba crear una matriz con una cantidad de números aleatorios distintos mantenidos en un rango específico. A continuación se muestra mi solución.
Hubiera preferido no crear un bucle que tuviera la posibilidad de terminar con muchas llamadas innecesarias (si su recuento y rango son altos y están cerca del mismo número), pero esto es lo mejor que pude encontrar.
fuente
Supongo que este método resolverá el problema con las probabilidades, solo limitado por el generador de números aleatorios.
fuente
Si lo necesita con valores únicos aleatorios de 0 ... rango de longitud:
fuente
Estoy bastante seguro de que esta es la forma más corta de crear su matriz aleatoria sin repeticiones
fuente
keys
funciónArray.from(Array(40).keys()).sort(_ => Math.random() - .5)
:? ¡Incluso podría volverse loco y usar el operador de propagación! Pero eso es demasiado emocionante para mí en este momento.Un poco tarde para la fiesta, pero uso randojs.com para aleatoriedad porque hace que este tipo de cosas sea muy fácil. Puede obtener una matriz aleatoria de números del 0 al 39 de la siguiente manera:
Sin problemas con la logística de todo, además es súper legible y fácil de entender :)
fuente
Generadores
Una matriz de longitud 40 de 40 valores posibles aleatorios (0 - 39) sin valores repetidos es mejor para mezclarla como explican @Phrogz y @Jared Beck. Otro enfoque, solo para los registros, podría ser el uso de generadores. Pero este enfoque carece de rendimiento en comparación con otras soluciones propuestas .
fuente