我已经找到了这个社区的解决方案,但我找不到解决方案 . 我的问题是“如何在JavaScript中从最大值中随机输入十进制数?”
示例:如果我将Total设置为1并将Size设置为5,那么我想为数组生成一个十进制数(大小为5),其总和为1 .
Sum Total: 1 Array Size: 5
结果数组:
[0.23, 0.12, 0.4, 0.14, 0.11]
谢谢你的建议 . 最好的祝福 .
如果我正确理解了您的要求,您希望生成一个具有固定总和的 n 数组(让我们称之为 s ) .
n
s
让我们从生成 n 随机数开始 . Javascript的Math.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 填充它以初始化它,然后用随机数替换每个元素 .
length
0
为了满足 sum 限制,我们需要做三件事:
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));
1 回答
如果我正确理解了您的要求,您希望生成一个具有固定总和的
n
数组(让我们称之为s
) .让我们从生成
n
随机数开始 . Javascript的Math.random()创建0到1之间的数字,如下所示:此函数使用
length
参数创建一个新数组,用0
填充它以初始化它,然后用随机数替换每个元素 .为了满足
sum
限制,我们需要做三件事:求所有随机数;
将所需总和除以计算的总和,以获得比例因子,和
按此比例因子乘以每个数字 .