Javascript随机url重定向,几率不同

Javascript随机url重定向,几率不同,javascript,Javascript,我有下面的代码,在页面加载重定向到不同的url的基础上随机数(从数量的链接提供)。它很好用 我想做的是控制每个链接被加载的几率 更确切地说,我只希望第一个链接“获胜”的几率最低 var链接=[ “flip1.html”, “flip2.html”, “flip3.html”, “flip4.html”, “flip5.html” ] var openSite=function(){ //获取一个介于0和链接数之间的随机数 var randIdx=Math.random()*links.leng

我有下面的代码,在页面加载重定向到不同的url的基础上随机数(从数量的链接提供)。它很好用

我想做的是控制每个链接被加载的几率

更确切地说,我只希望第一个链接“获胜”的几率最低

var链接=[
“flip1.html”,
“flip2.html”,
“flip3.html”,
“flip4.html”,
“flip5.html”
]
var openSite=function(){
//获取一个介于0和链接数之间的随机数
var randIdx=Math.random()*links.length;
//将其四舍五入,以便可以将其用作数组索引
randIdx=parseInt(randIdx,10);
//构造要打开的链接
var link='http://'+links[randIdx];
var win=window.open(链接“_self”);
win.focus();
};

您可以多次向阵列添加相同的链接

例如: 链接1有10%的机会,链接2有50%的机会,链接3有40%的机会

此机会所需的阵列:

var links = [
   'link1', // single link1
   'link2', // five times link2
   'link2',
   'link2',
   'link2',
   'link2',
   'link3', // four times link3
   'link3',
   'link3',
   'link3',
]
然后,您可以洗牌数组并从中随机获取值


link1的机会约为10%

您可以为每个可能的选项分配权重

然后,您可以在权重和上生成一个随机值,并查看随机值命中的位置:

var链接=[
{url:“flip1.html”,权重:1},//5%
{url:“flip2.html”,权重:2},//10%
{url:“flip3.html”,权重:3},//15%
{url:“flip4.html”,权重:4},//20%
{url:“flip5.html”,权重:10}//50%
];
函数加权随机数(arr)
{
var-weightSum=arr.map(l=>l.weight).reduce((a,b)=>a+b,0);
var rand=Math.random()*weightSum;
累计var=0;
对于(变量i=0;i实验()
找到这篇文章应该是字符串数组吗?或者我们可以制作一个对象数组,比如
[{“url”:“page1.html”,“赔率”:10},{“url”:“page2.html”,“赔率”:4}]
?哇,这看起来太棒了!谢谢我如何控制体重?因为我只需要flip1是4%,其余的是相同的赔率(24%),我不知道我是否喜欢这个游戏修复你正在做的xD。您还可以一步直接减少
arr.reduce((acc,l)=>acc+l.weight,0)谢谢@Avin。这不是游戏操纵,这是一个价值更大的奖品,因此获胜的机会更低。只合乎逻辑。不知道该放在哪里?
var-weightSum=arr.reduce((acc,l)=>acc+l.weight,0)。节省几微秒,没什么大不了的。这段代码的美妙之处在于,您可以准确地使用您想要的数字,而无需进行任何分数计算。因此,按该顺序将权重替换为
4,24,24,24,24