【问题标题】:Get random item for array based on different probabilities?根据不同的概率获取数组的随机项?
【发布时间】:2013-04-27 02:26:19
【问题描述】:

好的,想象一下我正在用 JavaScript 创建一个 Pokemon 游戏。我有一个这样的对象...

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

我基本上需要一个函数来随机选择对象中的口袋妖怪,而且还基于概率。因此,在这种情况下,函数更有可能选择“squirtle”,因为它的概率高于“pikachu”。

【问题讨论】:

  • 你需要什么?返回随机数的 JavaScript 函数?恐怕你必须自己实现逻辑,因为有几种方法可以实现你想要的。
  • @Jean-Bernard Pellerin 是最好的使用方法吗?

标签: javascript arrays random probability


【解决方案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。使用此函数,您可以将概率堆叠在一起并返回项目,随机数是其概率的范围。

【讨论】:

    【解决方案2】:

    我会遍历口袋妖怪数组并将所有概率相加。打电话给total

    然后生成一个介于 0 和 total 之间的值。打电话给randVal

    然后循环遍历,再次将概率相加。打电话给secondTotal
    第一个将secondTotal 推到randVal 上方的口袋妖怪是您选择的口袋妖怪。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-15
      • 2012-02-22
      • 2021-01-08
      • 2011-12-25
      • 2019-08-11
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多