Как рандомизировать десятичное число от максимального в JavaScript - PullRequest
0 голосов
/ 09 декабря 2018

Я уже нашел решение для этого сообщества, но не могу найти решение.Мой вопрос: «Как случайным образом десятичное число от максимума в JavaScript?»

Пример: если я установлю Total на 1, а Size на 5, то я хочу сгенерировать десятичное число в массив (размер 5)общая сумма на 1.

Sum Total: 1
Array Size: 5

Массив результатов:

[0.23, 0.12, 0.4, 0.14, 0.11]

Спасибо за все советы.С наилучшими пожеланиями.

1 Ответ

0 голосов
/ 09 декабря 2018

Если я правильно понимаю ваши требования, вы хотите сгенерировать массив из n чисел с фиксированной суммой (назовем это s).

Начнем с генерации n случайных чисел.Math.random() в Javascript создает числа от 0 до 1, например:

function randomArray(length, sum) {
  return new Array(length).fill(0).map(() => Math.random());
}

const rand = randomArray(5, 1);
console.log(rand);

console.log('Sum: ', rand.reduce((a, b) => (a + b), 0));

Эта функция создает новый массив с использованием параметра length, заполняет его 0 для его инициализации, а затем заменяет каждый элемент случайным числом.

Чтобы выполнить ограничение sum, нам нужно сделать три вещи:

  • Суммировать все случайные числа;
  • Разделить желаемую сумму на вычисленную сумму, чтобы получитьмасштабный коэффициент и
  • Умножьте каждое число на этот масштабный коэффициент.

function randomArray(length, sum) {
  const rawRandom = new Array(length).fill(0).map(() => Math.random());
  const multiplier = sum / rawRandom.reduce((a, b) => (a + b), 0);
  return rawRandom.map(n => (n * multiplier));
}

const rand = randomArray(5, 1);
console.log(rand);

console.log('Sum: ', rand.reduce((a, b) => (a + b), 0));
...