根据不同的概率获取数组的随机项?

时间:2013-05-02 19:23:27

标签: javascript arrays random probability

好吧,想象一下,我正在用JavaScript创建一个口袋妖怪游戏。我有一个像这样的对象......

pokemon = {
  "pikachu": {hp: 100, probability: 0.1},
  "squirtle": {hp: 90, probability: 0.2}
};

我基本上需要一个函数来随机选择对象中的小精灵,但也要基于概率。因此,在这种情况下,函数更可能选择“squirtle”,因为它的概率高于“pikachu”。

2 个答案:

答案 0 :(得分:7)

我会遍历口袋妖怪数组并将所有概率加起来。请拨打此total

然后生成0到total之间的值。请拨打此randVal

然后循环,再次添加概率。请致电此secondTotal
第一个将secondTotal推到randVal之上的小精灵是您选择的宠物小精灵。

答案 1 :(得分:1)

function pickAWinningItem(data) {
    var winner = Math.random();
    var threshold = 0;
    for (let i = 0; i < data.length; i++) {
        threshold += parseFloat(data[i].prob);
        if (threshold > winner) {
            return data[i]

        }
    }
}

所有概率的总和必须等于1.使用此函数,您可以将概率叠加在一起并返回项目,即随机数是其概率的范围。