JS 生成随机布尔值

2022-08-30 00:57:24

简单的问题,但我对这里的细微差别感兴趣。

我正在使用以下我自己想出的方法生成随机布尔值:

const rand = Boolean(Math.round(Math.random()));

每当出现时,似乎总会有一个陷阱 - 它不是真正的随机,它被某些东西或其他东西所破坏,等等。所以,我想知道:random()

a)以上是最佳做法方法吗?

b) 我是否想得太多了?

c) 我是否在思考不足?

d)有没有我不知道的更好/更快/更优雅的方式?

(如果B和C是互斥的,也有点感兴趣。

更新

如果它有所作为,我正在用它来移动AI角色。


答案 1

您可以直接比较,因为范围是(这意味着“在0到1的范围内,包括0,但不是1”)。可以将范围划分为 和 。Math.random()0.5Math.random()[0, 1)[0, 0.5)[0.5, 1)

var random_boolean = Math.random() < 0.5;

// Example
console.log(Math.random() < 0.1); //10% probability of getting true
console.log(Math.random() < 0.4); //40% probability of getting true
console.log(Math.random() < 0.5); //50% probability of getting true
console.log(Math.random() < 0.8); //80% probability of getting true
console.log(Math.random() < 0.9); //90% probability of getting true

答案 2

如果您的项目有 lodash,那么您可以:

_.sample([true, false])

或者,您可以使用自己的示例函数():

const sample = arr => arr[Math.floor(Math.random() * arr.length)];