Comment puis-je créer un tableau avec 40 éléments, avec des valeurs aléatoires de 0 à 39? Comme
[4, 23, 7, 39, 19, 0, 9, 14, ...]
J'ai essayé d'utiliser des solutions d'ici:
http://freewebdesigntutorials.com/javaScriptTutorials/jsArrayObject/randomizeArrayElements.htm
mais le tableau que j'obtiens est très peu aléatoire. Il génère beaucoup de blocs de nombres successifs ...
javascript
arrays
random
Alexandra
la source
la source
la source
[...Array(40)].map(_=>Math.ceil(Math.random()*40));
serait 11 caractères de moins que le vôtre et 7 de moins que l'original.Math.ceil
, bien que nous coupions 0 comme option. Si nous pouvons accepter 1-40 au lieu de 0-39, cela fonctionne. Sinon , réduire un caractère d'amélioration pour revenir àMath.floor
)ES5:
ES6:
la source
_
eti
? inutile dans ES6 sauf si je me trompe._
est l'élément actuel eti
est l'index actuel. Vous avez raison, ils sont inutiles dans les deux cas. Vous pouvez les supprimer si vous le souhaitez.Approche ES6 encore plus courte:
En outre, vous pouvez avoir une fonction avec des arguments:
la source
.fill()
sans aucun paramètre remplira le tableau avecundefined
, ce qui est la seule chose nécessaire ici pour.map()
fonctionnerLe plus court :-)
[...Array(40)].map(e=>~~(Math.random()*40))
la source
~~
est un raccourci pour Math.floor~~
sténographie? (modifier: ahh, c'est juste un opérateur au niveau du bit , je vois)Math.random()
renverra un nombre entre 0 et 1 (exclusif). Donc, si vous voulez 0-40, vous pouvez le multiplier par 40, le résultat le plus élevé est celui que vous multipliez.http://jsfiddle.net/robert/tUW89/
la source
Les séquences d'éléments aléatoires contiennent souvent des blocs de nombres successifs, voir l' erreur du joueur . Par exemple:
la source
limité le tableau à 6 valeurs pour le rendre facile à voir.
la source
Étant donné que la plage de nombres est limitée, je dirais que la meilleure chose à faire est de générer le tableau, de le remplir avec les nombres de zéro à 39 (dans l'ordre), puis de le mélanger.
la source
Math.random()
40 fois, car il imposera chaque numéro apparaissant une fois et aucune répétition.Ceci ci-dessus est la façon traditionnelle de le faire, mais je seconde @Pointy et @Phrogz si vous voulez éviter les doublons dans votre tableau sans avoir à faire de calculs coûteux
la source
Solutions monolignes originales tous les jours.
Les valeurs dans les tableaux sont totalement aléatoires, donc lorsque vous utiliserez ces extraits, ce sera différent.
Un tableau (longueur 10) avec des caractères aléatoires en minuscules
Un tableau (longueur 10) avec des nombres entiers aléatoires de 0 à 99
Un tableau de dates aléatoires (d'il y a 10 ans à maintenant)
Un tableau (longueur 10) chaînes aléatoires
D'autres choses utiles que vous pouvez trouver ici https://github.com/setivolkylany/nodejs-utils/blob/master/utils/faker.js
la source
En utilisant de nouvelles fonctionnalités ES6, cela peut désormais être réalisé en utilisant:
Notez que cette solution ne fonctionnera que dans les navigateurs modernes qui prennent en charge ces fonctionnalités ES6: les fonctions fléchées et Array.from ().
la source
Reportez-vous ci-dessous: -
la source
à partir de la page suggérée par @Phrogz
la source
J'avais besoin de quelque chose d'un peu différent de ce que ces solutions donnaient, en ce sens que je devais créer un tableau avec un certain nombre de nombres aléatoires distincts détenus dans une plage spécifiée. Voici ma solution.
J'aurais préféré ne pas créer une boucle qui a la possibilité de se retrouver avec beaucoup d'appels inutiles (si votre nombre et votre portée sont élevés et proches du même nombre) mais c'est le meilleur que je puisse trouver.
la source
Je suppose que cette méthode résoudra le problème des probabilités, uniquement limité par le générateur de nombres aléatoires.
la source
Si vous en avez besoin avec des valeurs uniques aléatoires de 0 ... plage de longueur:
la source
Je suis à peu près sûr que c'est le moyen le plus court de créer votre tableau aléatoire sans aucune répétition
la source
keys
fonctionArray.from(Array(40).keys()).sort(_ => Math.random() - .5)
:? Vous pourriez même devenir fou et utiliser l'opérateur de propagation! Mais c'est trop excitant pour moi en ce moment.Un peu tard à la fête, mais j'utilise randojs.com pour le hasard car cela rend des choses comme ça super faciles. Vous pouvez obtenir un tableau aléatoire de nombres de 0 à 39 comme ceci:
Pas de problème avec la logistique de tout cela - en plus c'est super lisible et facile à comprendre :)
la source
Générateurs
Un tableau de longueur 40 de 40 valeurs aléatoires possibles (0 - 39) sans valeurs répétées est préférable de le mélanger comme l'expliquent @Phrogz et @Jared Beck. Une autre approche, juste pour les enregistrements, pourrait être l'utilisation de générateurs. Mais cette approche manque de performances par rapport aux autres solutions proposées .
la source