首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JS生成随机布尔值

JS生成随机布尔值
EN

Stack Overflow用户
提问于 2016-04-21 06:27:54
回答 7查看 125.1K关注 0票数 198

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

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

代码语言:javascript
复制
const rand = Boolean(Math.round(Math.random()));

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

a)以上是最佳实践方法吗?

b)我是不是想多了?

c)我是不是想太少了?

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

(如果B和C是互斥的,也会引起一些兴趣。)

更新

如果有区别的话,我会用它来移动一个AI角色。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-04-21 06:39:54

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

代码语言:javascript
复制
var random_boolean = Math.random() < 0.5;

代码语言:javascript
复制
// 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

票数 503
EN

Stack Overflow用户

发布于 2017-11-24 22:03:04

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

代码语言:javascript
复制
_.sample([true, false])

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

代码语言:javascript
复制
const sample = arr => arr[Math.floor(Math.random() * arr.length)];
票数 32
EN

Stack Overflow用户

发布于 2016-04-21 06:47:21

为了获得更安全的密码学上的值,您可以在现代浏览器中使用crypto.getRandomValues

示例:

代码语言:javascript
复制
var randomBool = (function() {
  var a = new Uint8Array(1);
  return function() {
    crypto.getRandomValues(a);
    return a[0] > 127;
  };
})();

var trues = 0;
var falses = 0;
for (var i = 0; i < 255; i++) {
  if (randomBool()) {
    trues++;
  }
  else {
    falses++;
  }
}
document.body.innerText = 'true: ' + trues + ', false: ' + falses;

请注意,crypto对象是DOM,因此它在Node中不可用,而在there is a similar API for Node中可用。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36756331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档