【发布时间】:2016-02-01 03:15:10
【问题描述】:
我有两个定义的对象:x 和 y
如果我跟随,获得x 或y 的机会是相等的——2 中的1 个:
var primary = [x, y];
var secondary = primary[Math.floor(Math.random() * primary.length)];
这需要 3 之一(更小)的机会获得y:
var primary = [x, x, y];
// secondary unchanged
等等
但我相信,这是不好的做法,因为如果我想设置获得y 的无限小机会(例如 1e9 中的 1 次),我将不得不做一些非常 像这样浪费:
var primary = new Array();
for (i = 1e9 - 1; i--; i) primary.push(x);
primary.push(y);
var secondary = primary[Math.floor(Math.random() * primary.length)];
在 JavaScript 中有没有更好的方法来做到这一点?
【问题讨论】:
-
只需“四舍五入”您的随机数,以便您落在一个索引上的概率高于另一个索引。没有理由为此构建一个巨大的数组。
-
@Bergi:对不起,我没听懂你的意思。
-
只需使用
primary[Math.random < 1e-9 ? 1 : 0]。当您知道哪些元素将在哪里时,没有理由实际创建数组 - 只需通过它们的虚构位置选择元素。
标签: javascript math random probability