Quel est le meilleur moyen de générer 5 entiers aléatoires non dupliqués de 0 à 20?
Je pense, utilisez Math.random avec le plancher, bouclez-le 5 fois, vérifiez les doublons, s'il est dupliqué, aléatoire à nouveau.
Quelle est votre manière?
Edit : Une meilleure solution que celle-ci ou les autres postées ici peuvent être trouvées dans cette réponse à cette question lorsqu'elle a été interrogée en 2008. Résumant: Générer un tableau (comme suggère Darin dans sa réponse ci-dessous) et le mélanger en utilisant le Knuth- Yates-Fisher shuffle . N'utilisez pas un shuffle naïf, utilisez un qui est connu pour avoir de bons résultats.
C'est à peu près comment je le ferais, oui. J'utiliserais probablement un objet pour garder une trace des nombres entiers que j'avais déjà, car c'est pratique. Par exemple:
var ints = {};
Ensuite, une fois que vous avez créé un nouveau numéro aléatoire, vérifiez-le et conservez-le:
if (!ints[number]) { // It's a keeper ints[number] = true; results.push(number); }
Vous pouvez générer un nombre de nombres de 0 à 20, mélanger et prendre les 5 premiers éléments du tableau résultant.
Réponse tardive que je connais, mais:
var a=[]; while(a.length <3) { var n = Math.round(Math.random() * 20); if (a.indexOf(n)==-1) a.push(n); }
=> [14, 17, 19]