J'ai une exigence un peu étrange où je dois générer des nombres aléatoires de la longueur donnée par l'utilisateur. L'utilisateur peut donner la Longueur minimale
et la Longueur maximale
et je dois générer les nombres aléatoires qui consistent en la longueur de caractère entre cette plage.
Par exemple, si le La longueur minimale
est 6
et la Longueur maximale
est 10
alors je dois générer les nombres aléatoires dont le nombre de caractères doit être entre la plage 6
et 10
. Pour cet exemple, voici les générateurs aléatoires:
123456, 7654321, 12345678, 987654321, 5432109876, etc.
Comme ceci, les générateurs aléatoires doivent contenir la longueur qui se trouve entre les entrées fournies.
I savoir créer des nombres aléatoires entre une plage et basés sur une longueur de caractère fixe, mais je ne sais pas comment créer en fonction de la longueur variable. J'ai essayé de trouver les réponses mais la plupart d'entre elles sont basées sur la longueur fixe et la plage fixe, je n'ai pas pu trouver la correspondance exacte que je recherche.
Ce serait vraiment génial si quelqu'un peut m'aider avec ça .
5 Réponses :
Vous pouvez produire un tableau ( Array.from () de longueur choisie au hasard dans la plage minLen
et maxLen
) et remplissez cela avec des chiffres aléatoires dans la plage 1 à 9, puis Array. prototype.join ()
le tableau en chaîne et le convertir en nombre:
const randomNum = (minLen, maxLen) => +Array .from( {length: 0|Math.random()*(maxLen-minLen+1)+minLen}, () => 0|Math.random()*9+1 ) .join('') console.log(randomNum(3,7))
Je suis incapable de comprendre tout ce qui se passe dans le code, mais il fonctionne comme prévu. Si je souhaite modifier cette fonction pour générer des nombres aléatoires alphanumériques
, comment puis-je la modifier?
Essayez ceci:
var minLength = 1; var maxLength = randomNumber; var generatedNumbers = []; for(var i=minLength ; i<=maxLength; i++){ var num = ""; for(var j=1;j<=i;j++){ num = num + Math.floor(Math.random(10) * 10); } generatedNumbers.push(num); } console.log(generatedNumbers);
Modifier
var minLength = 6; var maxLength = 10; var generatedNumbers = []; for(var i=minLength ; i<=maxLength; i++){ var num = ""; for(var j=1;j<=i;j++){ num = num + Math.floor(Math.random(10) * 10); } generatedNumbers.push(num); } console.log(generatedNumbers);
cela vous aidera .
Merci pour la réponse. Mais il semble que cela génère des nombres aléatoires de 6 puis 7 puis 8 caractères. J'essaie de créer les nombres aléatoires lorsque la longueur du nombre aléatoire est également assez aléatoire, comme il peut s'agir de 6 chiffres, puis de 9 chiffres, puis de 7 chiffres, y a-t-il un moyen de modifier cela?
Vous pouvez générer la plage et obtenir les valeurs aléatoires de cette plage.
Par exemple
.as-console-wrapper { max-height: 100% !important; top: 0; }
const getRandom = (min, max) => Math.floor(Math.random() * (max - min)) + min, getRandomX = (min, max) => getRandom(10 ** (min - 1), 10 ** max); let min = Infinity, max = -Infinity; for (let i = 0; i < 1e6; i++) { let r = getRandomX(6, 10); if (min > r) min = r; if (max < r) max = r; } console.log(min, max);
min = 2 max = 4 rangeMin = 10 rangeMax = 10000
D'autres solutions génèrent des aléas pour chaque chiffre et les joignent pour former un nombre. Ceci n'est pas nécessaire. Nous savons qu'un nombre avec au moins m
-ièmes chiffres vaut au moins 10 m - 1 . De même, avoir au plus n
chiffres signifie que le nombre est inférieur à 10n.
const randomWithinRange = (min, max) => Math.floor(Math.random() * (max - min) + min); const randomWithMagnitude = (min, max) => randomWithinRange(Math.pow(10, min - 1), Math.pow(10, max)); const arr = Array(100000).fill().map(() => randomWithMagnitude(6, 10)).sort((a, b) => a - b); console.log(arr.slice(0, 100).join(", ")); console.log(arr.slice(99900, 100000).join(", "));
Remarque: j'ai trié le tableau de taille 100 000 juste pour vous montrer le plus petit et le plus grand nombre généré.
Merci beaucoup à tous pour la réponse. Voici l'approche que j'ai utilisée.
Si les nombres aléatoires avec uniquement Numérique sont requis:
var charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; var charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~()'!*:@,;";
Modifiez le jeu de caractères alphanumériques et alphanumériques avec des caractères spécifiques à l'URL comme ceci:
var charset = "0123456789"; var max_Length = 5; var min_Length = 10; var charPicker = Math.floor(Math.random() * (max_Length - min_Length + 1) + min_Length); var randomId; for (var i = 0; i < charPicker; i++) { randomId += charset.charAt(Math.floor(Math.random() * charset.length)); } console.log(randomId);
J'irais en randomisant d'abord la longueur entre les longueurs min et max fournies, puis en obtenant un aléatoire entre le nombre min que vous pouvez avoir avec cette longueur et le nombre maximal que vous pouvez obtenir avec cette longueur