Как сгенерировать случайные числа в Javascript на основе предоставленного диапазона Минимум и Максимум символов - PullRequest
1 голос
/ 19 июня 2020

У меня есть немного странное требование, когда мне нужно генерировать случайные числа длины, заданной пользователем. Пользователь может указать Minimum Length и Maximum Length, и мне нужно сгенерировать случайные числа, которые состоят из длины символа между этим диапазоном.

Например, если Minimum Length равно 6 и Maximum Length равно 10, то мне нужно сгенерировать случайные числа, количество символов которых должно находиться в диапазоне от 6 до 10. В этом примере генераторы случайных чисел могут быть следующими:

123456,
7654321,
12345678,
987654321,
5432109876, etc.

Таким образом, генераторы случайных чисел должны содержать длину, которая находится между предоставленными входами.

Я знаю, как создавать случайные числа между диапазон и основан на фиксированной длине символа, но я не знаю, как создать на основе переменной длины. Я пытался найти ответы, но большинство из них основаны на фиксированной длине и фиксированном диапазоне, не смог найти точное совпадение, которое я ищу.

Было бы здорово, если бы кто-нибудь мог мне с этим помочь.

Ответы [ 5 ]

3 голосов
/ 19 июня 2020

Вы можете создать массив (Array.from() произвольно выбранной длины в диапазоне minLen и maxLen) и заполнить его случайными цифрами в диапазоне от 1 до 9, затем Array.prototype.join() массив в строку и преобразование в число:

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 голос
/ 19 июня 2020

Вы можете сгенерировать диапазон и получить случайные значения из этого диапазона.

Например

min = 2
max = 4

rangeMin = 10
rangeMax = 10000

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);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 22 июня 2020

Спасибо всем за ответ. Вот подход, который я использовал.

Если требуются случайные числа только с Numeri c:

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

Измените набор символов для Alphanumeri c и Alphanumeri c с указанием URL c символов, например:

var charset         = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var charset         = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~()'!*:@,;";
0 голосов
/ 19 июня 2020

Другие решения генерируют случайные числа для каждого di git и объединяют их вместе в число. В этом нет необходимости. Мы знаем, что число, состоящее как минимум из m -й цифры, равно как минимум 10 m - 1 . Точно так же наличие не более n цифр означает, что число меньше 10 n .

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(", "));

Примечание. Я отсортировал массив размером 100 000, чтобы показать вам самые маленькие и самые большие сгенерированные числа.

0 голосов
/ 19 июня 2020

Попробуйте следующее:

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

Edit

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

это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...