javascript - 如何在 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]
感谢您的所有建议。此致。
解决方案
如果我正确理解您的要求,您想生成一个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));
推荐阅读
- xslt - 本地命名空间没有为 XSLT 映射选择多个值
- node.js - 在 Alexa Intent 处理程序中进行 API 调用
- sql-server - SQL Server:从一列创建两列
- php - 重复代码,生成函数,但保持变量全局?
- php - 使用数组按票数排序后未显示新的自定义帖子
- mysql - 基于两个列 id 的 mySQL 透视/合并/移动行到列中
- r - 计算具有相似键的过去条目
- r - ggplot2中的颜色和填充参数有什么区别?
- sql - 将 spark 数据帧聚合转换为 SQL 查询;window、groupby 的问题,以及如何聚合?
- vhdl - 在第一个时钟脉冲中读取 ROM 时出现意外值