首页 > 解决方案 > 如何在 JavaScript 中从最大值中随机取一个十进制数

问题描述

我已经在这个社区找到了解决方案,但我找不到解决方案。我的问题是“如何从 JavaScript 中的最大值随机抽取一个十进制数?”

示例:如果我将 Total 设置为 1,Size 设置为 5,那么我想生成一个十进制数到一个总和为 1 的数组(Size 5)。

Sum Total: 1
Array Size: 5

结果数组:

[0.23, 0.12, 0.4, 0.14, 0.11]

感谢您的所有建议。此致。

标签: javascriptarraysrandomlogic

解决方案


如果我正确理解您的要求,您想生成一个n总和固定的数字数组(我们称之为s)。

让我们从生成n随机数开始。JavascriptMath.random()创建 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));


推荐阅读