首页 > 解决方案 > 根据百分比机会选择级别

问题描述

我有以下格式的 JSON:

"fire": {
        "price": 25,
        "uniques": [
            23
        ],
        "levels": {
            "1": 30,
            "2": 50,
            "3": 10,
            "4": 6.5,
            "5": 2.5,
            "6": 0.9,
            "7": 0.1
        }
    }

这些级别有我需要选择的级别,以百分比机会作为值。(例如 1 级有 30% 的机会)

我需要以某种方式选择一个随机级别,同时遵循这些机会。

我试过的:把我的头撞在墙上

标签: node.jsjson

解决方案


这种方法会生成一个随机值,并从阈值开始1。然后它迭代地减去每个级别的概率百分比,直到达到随机值超过阈值的级别:

const probabilities = {
  "1": 30,
  "2": 50,
  "3": 10,
  "4": 6.5,
  "5": 2.5,
  "6": 0.9,
  "7": 0.1
};

const level = () => {
  const random = Math.random();
  let threshold = 1;
  
  for (let [level, percentage] of Object.entries(probabilities)) {
    threshold = threshold - (percentage / 100);
    
    if (random >= threshold) {
      return level;
    }
  }
}

console.log([...Array(20)].map(_ => level())); // 20 examples

如果性能是一个问题,您可以预先计算阈值。


推荐阅读