Como posso criar um array com 40 elementos, com valores aleatórios de 0 a 39? Gostar
[4, 23, 7, 39, 19, 0, 9, 14, ...]
Tentei usar soluções daqui:
http://freewebdesigntutorials.com/javaScriptTutorials/jsArrayObject/randomizeArrayElements.htm
mas a matriz que obtenho é muito pouco aleatória. Gera muitos blocos de números sucessivos ...
javascript
arrays
random
Alexandra
fonte
fonte
fonte
[...Array(40)].map(_=>Math.ceil(Math.random()*40));
seriam 11 caracteres a menos que o seu e 7 a menos que o original.Math.ceil
, embora cortemos 0 como uma opção. Se pudermos aceitar 1-40 em vez de 0-39, isso funciona. , reduza um caráter de melhoria para voltar aMath.floor
)ES5:
ES6:
fonte
_
ei
? desnecessário no ES6 a menos que eu esteja enganado._
é o elemento atual ei
é o índice atual. Você está certo, eles são desnecessários em ambos os casos. Você pode removê-los se quiser.Abordagem ES6 ainda mais curta:
Além disso, você pode ter uma função com argumentos:
fonte
.fill()
sem nenhum parâmetro preencherá a matriz comundefined
, que é a única coisa necessária aqui para.map()
funcionarMais curto :-)
[...Array(40)].map(e=>~~(Math.random()*40))
fonte
~~
é uma abreviação de Math.floor~~
abreviação? (editar: ahh, é apenas um operador bit a bit , eu vejo)Math.random()
retornará um número entre 0 e 1 (exclusivo). Então, se você quiser 0-40, pode multiplicá-lo por 40, o maior resultado pode ser pelo que você está multiplicando.http://jsfiddle.net/robert/tUW89/
fonte
Seqüências de itens aleatórios geralmente contêm blocos de números sucessivos, veja a Falácia do Jogador . Por exemplo:
fonte
Como o intervalo de números é restrito, eu diria que a melhor coisa a fazer é gerar a matriz, preenchê-la com números de zero a 39 (em ordem) e, em seguida, embaralhá-la.
fonte
Math.random()
40 vezes, uma vez que forçará cada número aparecendo uma vez e sem repetições.limitou a matriz a 6 valores para facilitar a visualização.
fonte
Esta é a maneira tradicional de fazer isso, mas eu apoio @Pointy e @Phrogz se você quiser evitar duplicatas em seu array sem ter que fazer cálculos caros
fonte
Soluções de linha única peculiares todos os dias.
Os valores em arrays são totalmente aleatórios, portanto, quando você usar esses snippets, será diferente.
Uma matriz (comprimento 10) com caracteres aleatórios em minúsculas
Uma matriz (comprimento 10) com números inteiros aleatórios de 0 a 99
Uma matriz de datas aleatórias (de 10 anos até agora)
Uma matriz (comprimento 10) strings aleatórias
Outras coisas úteis que você pode encontrar aqui https://github.com/setivolkylany/nodejs-utils/blob/master/utils/faker.js
fonte
Usando alguns novos recursos do ES6, isso agora pode ser obtido usando:
Observe que esta solução só funcionará em navegadores modernos que suportam esses recursos ES6: funções de seta e Array.from ().
fonte
Consulte abaixo: -
fonte
da página sugerida por @Phrogz
fonte
Eu precisava de algo um pouco diferente do que essas soluções ofereciam, pois precisava criar uma matriz com vários números aleatórios distintos mantidos em um intervalo especificado. Abaixo está minha solução.
Eu teria preferido não criar um loop que pudesse terminar com muitas chamadas desnecessárias (se sua contagem e intervalo forem altos e próximos ao mesmo número), mas este é o melhor que eu poderia fazer.
fonte
Eu acho que este método vai resolver o problema com as probabilidades, apenas limitadas pelo gerador de números aleatórios.
fonte
Se você precisar dele com valores únicos aleatórios de 0 ... intervalo de comprimento:
fonte
Tenho certeza de que esta é a maneira mais curta de criar seu array aleatório sem nenhuma repetição
fonte
keys
funçãoArray.from(Array(40).keys()).sort(_ => Math.random() - .5)
:? Você pode até ficar louco e usar o operador de propagação! Mas isso é muito emocionante para mim agora.Um pouco tarde para a festa, mas eu uso randojs.com para aleatoriedade porque torna esse tipo de coisa super fácil. Você pode obter uma matriz aleatória de números de 0 a 39, assim:
Sem complicações com a logística de tudo - além de ser super legível e fácil de entender :)
fonte
Geradores
Uma matriz de comprimento 40 de 40 valores possíveis aleatórios (0 - 39) sem valores repetidos é melhor embaralhar como explicam @Phrogz e @Jared Beck. Outra abordagem, apenas para os registros, poderia ser o uso de geradores. Mas essa abordagem carece de desempenho em comparação com outras soluções propostas .
fonte