gpt4 book ai didi

javascript - 从列表中随机选择项目,每个都有不同的机会

转载 作者:行者123 更新时间:2023-12-03 09:46:39 25 4
gpt4 key购买 nike

我想写一个简单的函数,允许从列表中滚动随机项目,我用这段代码做到了:

this.resources = [false, 'nitrogen', 'silicon', 'cobalt', 'magnesium'];

this.assign_resource = function() {
var index = tools.rnd(0, this.resources.length - 1);
return this.resources[index];
};

但是它玩得不好,所以我想把它改成不同的系统,允许一个项目列表(包括空的),它随机选择一个,但每个都有不同的机会(例如这个有 10 %,这个有 20%)。也许有人可以帮助我实现这种功能。

已编辑 -----

例如这可能是新列表:

this.resources = [
{ type: 'empty', chance: 30 },
{ type: 'nitrogen', chance: 10 },
{ type: 'silicon', chance: 20 },
{ type: 'cobalt', chance: 30 },
{ type: 'magnesium', chance: 10 }
];

现在如何使用它才能使它正常发生?

已编辑 2 -----

我正在尝试使用数学找出做得好的编程解决方案,而不是简单地复制数组中的项目,答案在 this 中给出。主题只是解决问题的方法。

最佳答案

我会通过有机会成为结果的对象数组来解决它,总计 1.0,然后选择一个介于 0 和 1 之间的随机数,然后遍历资源并检查如果将其添加到累计总数中包括您的随机数。

var resources = [
{ resource: false, chance: 0.2 },
{ resource: 'nitrogen', chance: 0.1 },
{ resource: 'silicon', chance: 0.2 },
{ resource: 'cobalt', chance: 0.45 },
{ resource: 'mangesium', chance: 0.05 }
];

function get_result(resouceList) {
//get our random from 0 to 1
var rnd = Math.random();

//initialise our cumulative percentage
var cumulativeChance = 0;
//iterate over our resources
for (var i = 0; i < resouceList.length; i++) {

//include current resource
cumulativeChance += resouceList[i].chance;

if (rnd < cumulativeChance)
return resouceList[i].resource;
}

return false;
}

//test
console.log(get_result(resources));
console.log(get_result(resources));
console.log(get_result(resources));
console.log(get_result(resources));
console.log(get_result(resources));

关于javascript - 从列表中随机选择项目,每个都有不同的机会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44437797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com