好的,想象一下我正在用 JavaScript 创建一个 Pokemon 游戏。我有一个这样的对象...
pokemon = {
"pikachu": {hp: 100, probability: 0.1},
"squirtle": {hp: 90, probability: 0.2}
};
我基本上需要一个函数来随机选择对象中的口袋妖怪,而且还基于概率。因此,在这种情况下,函数更有可能选择“squirtle”,因为它的概率高于“pikachu”。
好的,想象一下我正在用 JavaScript 创建一个 Pokemon 游戏。我有一个这样的对象...
pokemon = {
"pikachu": {hp: 100, probability: 0.1},
"squirtle": {hp: 90, probability: 0.2}
};
我基本上需要一个函数来随机选择对象中的口袋妖怪,而且还基于概率。因此,在这种情况下,函数更有可能选择“squirtle”,因为它的概率高于“pikachu”。
我会遍历口袋妖怪数组并将所有概率相加。调用这个total
然后生成一个介于 0 和 之间的值total
。调用这个randVal
然后循环,再次将概率相加。称之为secondTotal
第一个概率secondTotal
高于上面randVal
的口袋妖怪是你选择的口袋妖怪。
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。使用此函数,您可以将概率堆叠在一起并返回项目,即随机数是其概率的范围。