使用 Math.random()
生成随机值,使用乘法将其映射到所需的范围。
const random = (min, max) => Math.floor(Math.random() * (max - min)) + min
为了方便理解,我们将该方法拆解一下:
const MIN = 1
const MAX = 4
// 用减法算出差值
const DELTA = MAX - MIN
const initialRandom = Math.random()
// 将随机数乘以差值
const multiplied = initialRandom * DELTA
// 使用 Math.floor 将其四舍五入
const floored = Math.floor(multiplied)
// 加上最小值,我们将其向上移动以完美匹配范围:
const answer = floored + MIN
此随机方法包括下限,但不包括上限。例如,random(10, 12)
将随机 10 或 11,但从不随机 12。
这是有意做的,以匹配 Math.random
以及 slice
等 JavaScript 方法的行为。
// 从 [10, 11, 12, 13] 中获取一个随机数
console.log(random(10, 14))
// 获取从 1 到 100(包含 100)的随机数
console.log(random(1, 101))
// 获取一个从 -10 到 10(包含 10)的随机数
console.log(random(-10, 11))
有一篇很棒的文章 Lots of Ways to Use Math.random() in JavaScript 介绍了如何使用 Math.random
实现各种很酷炫的示例。