我想在JavaScript中创建一个随机 bool(boolean) 值,但我想考虑先前的值。如果先前的值为true,则我希望下一个值为true的可能性更大。目前,我已经知道了(这是在闭包的上下文中-goUplastGoUp是包含作用域的本地对象):

function setGoUp() {
    goUp = getRandomBoolean();

    if(lastGoUp) {
        goUp = getRandomBoolean() || goUp;
    }
    else {
        goUp = getRandomBoolean() && goUp;
    }
    lastGoUp = goUp;
}

因此,算法为:
  • 获取随机 bool(boolean) 值
  • 如果上一次调用的随机 bool(boolean) 值为True:

    a)获得另一个随机 bool(boolean) 值,并将or这两个一起

    b)否则一起获得另一个随机 bool(boolean) 值和and

  • 我确定可以简化此算法。我想知道这样做:
    if(lastGoUp && goUp) {
        goUp = goUp * (getRandomBoolean() || goUp);
    }
    

    但这看起来真的很脏。

    该算法还存在一个问题,这意味着我只能再次获得相同的 bool(boolean) 值的机会加倍-我不能轻易对其进行调整。有任何想法吗?

    最佳答案

    您应该定义所需的分布,但是也许您正在寻找以下内容?

    if (lastGoUp) {
        goUp = Math.random() < 0.8;
    } else {
        goUp = Math.random() < 0.2;
    }
    

    07-24 09:25