1
votes

Comment générer des nombres aléatoires en Javascript en fonction de la plage fournie de caractères minimum et maximum

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 .


1 commentaires

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


5 Réponses :


3
votes

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))


1 commentaires

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?



0
votes

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 .


1 commentaires

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?



1
votes

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


0 commentaires

0
votes

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é.


0 commentaires

-1
votes

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);


0 commentaires