Jquery 如何使用Math.random()生成罕见到常见的结果

Jquery 如何使用Math.random()生成罕见到常见的结果,jquery,random,Jquery,Random,我在一个系统上工作,在这个系统中,一个图像在一段随机时间后被替换。然而,我目前有它选择之间的数字1-5显示的目的。我想知道是否可以使用Math.random()使一些数字比其他数字更稀有。例如,如果我希望数字1经常出现,但希望数字5非常罕见,我可以用Math.random()来实现吗?如果没有,什么可以做到 我目前拥有的代码: $(function() { $("#test").click(function() { randomGen(); }); function randomGen

我在一个系统上工作,在这个系统中,一个图像在一段随机时间后被替换。然而,我目前有它选择之间的数字1-5显示的目的。我想知道是否可以使用Math.random()使一些数字比其他数字更稀有。例如,如果我希望数字1经常出现,但希望数字5非常罕见,我可以用Math.random()来实现吗?如果没有,什么可以做到

我目前拥有的代码:

$(function() {
$("#test").click(function() {
    randomGen();
});

function randomGen() {
var rand = Math.floor((Math.random() * 5) + 1);
var test = Math.floor((Math.random() * 15000) + 1);
    if (rand === 1) { 
        console.log(rand);
    }
    if (rand === 2) {
        console.log(rand);
    }
    if (rand === 3) {
        console.log(rand);
    }
    if (rand === 4) {
        console.log(rand);
    }
    if (rand === 5) {
        console.log(rand);
    }
setTimeout(randomGen, test);
}
});
尝试:


通过将随机数在0和1之间平方,分布向较低的数字倾斜。这使得1比2更常见,比3更常见,等等。如果您希望调整分布或改变周围的情况,请调整指数。

不,数学。随机不适合直接用于使某些数字比其他数字更频繁地出现

但是,您可以添加自己的“权重”函数,如下所示:

//Returns a random with a 20% chance of 1, 40% chance of 2 or 3
function WeightedRandom()
{
    var num = Math.random() * 100;

    if(num < 20)
        return 1;
    if(num < 60)
        return 2;
    else return 3;
}
//返回概率为20%的1、概率为40%的2或3的随机数
函数权重随机数()
{
var num=Math.random()*100;
如果(数值<20)
返回1;
如果(数量<60)
返回2;
否则返回3;
}

这当然是高度手动的,我相信你可以想出一个聪明的方法使它更加自动化。

这是不对的。这只是对数字应用一个函数,使其符合指数曲线,而不是使其显式加权。@Pheonixblade9:这可能就是OP的意思。它比真正的加权函数简单得多,因为它从数学上调整分布。它告诉我“未捕获的引用错误:r未定义”,我不知道你是否忘记定义它,或者我应该定义它,或者是什么。对不起,我是个傻瓜,先用C写的。)太棒了,它工作了!现在我有另一个问题,它在2到3次之后停止,即使我设置了超时,它也不会重复(WeightedRandom,test);其中定义了测试,并给出了一个随机数。我不知道为什么会这样。我不知道为什么会这样,但是如果它解决了你的问题,请确保将此标记为正确的-并且可以为你的新问题自由地问另一个问题:)哈哈,是的,我必须等90分钟再问另一个问题:P再次感谢你!
//Returns a random with a 20% chance of 1, 40% chance of 2 or 3
function WeightedRandom()
{
    var num = Math.random() * 100;

    if(num < 20)
        return 1;
    if(num < 60)
        return 2;
    else return 3;
}