Выберите уникальные случайные числа в узле / экспрессе JS - PullRequest
0 голосов
/ 23 декабря 2019

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

Должна быть опция для ввода количества, например, если мы даем 3, система должна выбрать 3 числа из данного списка.

Есть ли какая-либо доступная библиотека?

Ответы [ 2 ]

0 голосов
/ 23 декабря 2019
const crypto = require('crypto');
const yourNumbers = [1,2,5,3,4,5,67,34,5345,6623,4234];

let selectedNumbers = [];
let i = 0;
const numbersRequired = 4;
while (i < numbersRequired){
    const pos = crypto.randomBytes(4).readUInt32BE()%yourNumbers.length;
    if (selectedNumbers.includes(yourNumbers[pos])) {
        continue;
    }
    i++;
    selectedNumbers.push(yourNumbers[pos]);
}
console.log(selectedNumbers)

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

0 голосов
/ 23 декабря 2019
const count = 8
pickedNumbers = [];
randomNumberList = [5,7,22,45,77,33,7,33,11,22,53,46,86,57,88];

for (i =0; i< count ; i++){
  const randArrayIndex = Math.floor(Math.random() * randomNumberList.length);
  pickedNumbers.push(randomNumberList[randArrayIndex]);
}

console.log(pickedNumbers);

Это простой расчет. нет необходимости во внешней библиотеке. Вы можете использовать случайную функцию объекта Math для генерации случайного числа в js. Он вернет число от 0 до 1. умножьте его на длину вашего списка массивов. тогда он даст вам случайное значение индекса из диапазона 0 - длины вашего массива. Вы можете использовать метод push объекта массива, чтобы переместить генерируемые вами числа в пустой массив. контролируйте, сколько раз вы хотите, чтобы это происходило, с помощью цикла, устанавливающего значение счетчика по пользовательским данным.

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