ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

30 seconds of code 实战:用 JavaScript 在指定区间生成随机数与随机整数

30 seconds of code 实战:用 JavaScript 在指定区间生成随机数与随机整数 教程文档【免费下载链接】30-seconds-of-codeCoding articles to level up your development skills项目地址https://gitcode.com/gh_mirrors/30/30-seconds-of-code点击查看免费下载本篇指南以 30 seconds of code 仓库中的 random-number-or-integer-in-range 为骨架完整讲解如何基于原生Math.random()通过简单数学运算生成任意闭区间[min, max]内的随机浮点数、随机整数以及利用 Box-Muller 变换生成高斯正态分布随机数。读完你将得到可直接复制进项目的三行级工具函数并理解其边界语义、取整陷阱与适用场景。起点理解Math.random()的输出域JavaScript 内置的Math.random()会返回一个大于等于 0 且小于 1的伪随机浮点数即值域为[0, 1)。它在 30 seconds of code 仓库中被视为随机值工具函数的核心原料——仓库在 javascript.yaml 中记录了Math.random()的标准引用而 random-value-generators 集合 下的随机布尔、随机十六进制颜色、随机字母数字串、UUID 等 snippet 全部建立在它的基础之上。直接使用Math.random()只能得到[0, 1)区间的小数想要某个范围内的随机数就需要用线性映射把输出域搬移到目标区间。区间内随机浮点数randomNumberInRange(min, max)生成指定区间内随机浮点数是最简单的映射场景用Math.random()的结果乘以最大值与最小值的差再加上最小值即可const randomNumberInRange (min, max) Math.random() * (max - min) min; randomNumberInRange(2, 10); // 6.0211363285087005推导过程如下Math.random()产出[0, 1)乘以(max - min)后得到[0, max - min)加上min后得到[min, max)。注意该结果是左闭右开的理论上可以等于min当Math.random()返回 0 时但永远取不到max。对浮点数场景如随机角度、随机坐标偏移这通常无关紧要。参数与边界说明参数含义说明min区间下限结果可取到该值需为有限数值max区间上限结果取不到该值开区间上界返回值[min, max)内的浮点数精度取决于Math.random()的 53 位尾数当max min时公式仍会给出一个递减区间内的值当min max时恒返回min。从仓库实现看该函数是箭头函数单表达式写法未做参数校验实际使用时若需处理非法输入可自行补充防御性判断。区间内随机整数randomIntegerInRange(min, max)生成随机整数与浮点版本非常相似只多了最后一步用Math.floor()将结果向下取整。但关键的差异在于乘数要使用(max - min 1)否则上界会出现偏差const randomIntegerInRange (min, max) Math.floor(Math.random() * (max - min 1)) min; randomIntegerInRange(0, 5); // 2为什么是(max - min 1)而不是(max - min)若沿用浮点版本的max - min则Math.random() * (max - min)最多接近max - min经Math.floor()后最大只能得到min (max - min - 1)上界max永远不会出现。把差值加 1使乘数范围变为[0, max - min 1)Math.floor()之后即可完整覆盖min到max的每一个整数含两端即闭区间[min, max]。为什么用Math.floor()而非Math.round()Math.round()会引入边界不对称区间首尾整数出现的概率只有中间整数的一半例如round(0.5)与round(1.4)均可能落到 1但 0 和 5 的命中区间被截断。Math.floor()配合(max - min 1)能保证每个整数等概率这是均匀随机整数实现的正确姿势。进阶Box-Muller 变换生成高斯随机数均匀分布之外某些模拟场景如噪声、评分波动、参数扰动需要正态分布高斯分布的随机数。30 seconds 的该文档给出基于 Box-Muller 变换的实现用两个独立的均匀随机数通过对数与三角运算映射出标准正态分布样本const randomGauss () { const theta 2 * Math.PI * Math.random(); const rho Math.sqrt(-2 * Math.log(1 - Math.random())); return (rho * Math.cos(theta)) / 10.0 0.5; }; randomGauss(); // 0.5逐行原理拆解theta 2 * Math.PI * Math.random()在[0, 2π)内取随机角度rho Math.sqrt(-2 * Math.log(1 - Math.random()))1 - Math.random()保证对数参数严格落在(0, 1]避免取到 0 导致-∞再经平方根得到服从瑞利分布的半径(rho * Math.cos(theta)) / 10.0 0.5rho * cos(theta)即标准正态样本均值 0、方差 1除以10.0压缩方差、加上0.5平移均值最终落在 0.5 附近的高斯分布。仓库通过 redirects.yaml 保留了random-gauss、random-integer-in-range、random-number-in-range三个旧路径到本文档的 301 重定向说明这份实现是该主题在项目中的唯一权威版本社区历史版本已被收敛至此。组合复用一次生成一整个随机整数数组掌握了单值生成批量场景即可顺势扩展。仓库中的姊妹篇 random-integer-array-in-range 正是复用randomIntegerInRange的核心逻辑用Array.from()与映射函数批量产出const randomIntArrayInRange (min, max, n 1) Array.from( { length: n }, () Math.floor(Math.random() * (max - min 1)) min ); randomIntArrayInRange(12, 35, 10); // [ 34, 14, 27, 17, 30, 27, 20, 26, 21, 14 ]第三个参数n默认值为 1代表返回数组长度。该函数与本文两个函数同属于 random-value-generators 集合集合还包含随机布尔、随机字母数字串、随机十六进制颜色与 UUID 生成器可作为随机值工具库的整体清单查阅。安全提醒Math.random()的适用边界必须明确的是Math.random()是非加密安全的伪随机数生成器输出的可预测性与统计特性不适合用于密码学、Token、抽奖防作弊等安全敏感场景。仓库在处理此类需求时的做法是转向Crypto API——例如 uuid-generator 中现代浏览器与 Node.js 优先使用crypto.randomUUID()旧环境则用crypto.getRandomValues()配合位运算生成。选型建议动画、游戏、抽样、UI 随机效果 →Math.random()系函数本文方案密码学安全随机 →crypto.randomUUID()/crypto.getRandomValues()。仓库位置速查主文档random-number-or-integer-in-range.md所属集合random-value-generators.yaml姊妹实现random-integer-array-in-range.md、random-boolean.md、random-alphanumeric.md、random-hex-color-code.md语言引用表javascript.yamlMath.random()官方语义参照旧路径重定向redirects.yaml本文全部函数均不依赖任何外部库可直接复制进浏览器控制台或 Node.js 脚本运行验证是日常开发中最轻量的随机数工具集。赞分享教程文档【免费下载链接】30-seconds-of-codeCoding articles to level up your development skills项目地址https://gitcode.com/gh_mirrors/30/30-seconds-of-code点击查看免费下载相关推荐30 seconds of code用 JavaScript 生成指定范围内的随机整数数组randomIntArrayInRange 全解析30 seconds of code用 JavaScript 生成指定范围内的随机整数数组randomIntArrayInRange 全解析 导读 在 J教程文档30 Seconds of Code 实战用 JavaScript 生成指定长度的随机字母数字字符串30 Seconds of Code 实战用 JavaScript 生成指定长度的随机字母数字字符串 导读 本文以 30 seconds of code 仓库教程文档30-seconds-of-code 实战JavaScript 数组的抽样、洗牌与加权随机选择30 seconds of code 实战JavaScript 数组的抽样、洗牌与加权随机选择 导读 在处理 JavaScript 数组时随机取值与洗牌是高教程文档创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表