日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JS根據(jù)獎(jiǎng)品權(quán)重計(jì)算中獎(jiǎng)概率

瀏覽:213日期:2024-03-28 10:28:00
一、示例場(chǎng)景1.1、設(shè)置抽獎(jiǎng)活動(dòng)的獎(jiǎng)項(xiàng)名稱

獎(jiǎng)項(xiàng)名稱:['一等獎(jiǎng)', '二等獎(jiǎng)', '三等獎(jiǎng)', '未中獎(jiǎng)']。假設(shè)抽獎(jiǎng)活動(dòng)設(shè)置了這四個(gè)獎(jiǎng)項(xiàng),當(dāng)然開發(fā)者可以擴(kuò)展更多。

var prizes = ['一等獎(jiǎng)','二等獎(jiǎng)','三等獎(jiǎng)','未中獎(jiǎng)']; //獎(jiǎng)項(xiàng)名稱數(shù)組1.2、設(shè)置各獎(jiǎng)項(xiàng)權(quán)重

獎(jiǎng)項(xiàng)權(quán)重:[1, 5, 20, 74]。獎(jiǎng)項(xiàng)權(quán)重主要用來表征各獎(jiǎng)項(xiàng)的中獎(jiǎng)幾率,這里獎(jiǎng)項(xiàng)權(quán)重?cái)?shù)組的和值為100(=1+5+20+74),其中1表示一等獎(jiǎng)的中獎(jiǎng)概率為1%;5表示一等獎(jiǎng)的中獎(jiǎng)概率為5%;20表示三等獎(jiǎng)的中獎(jiǎng)概率為20%;最后剩下的74表示未中獎(jiǎng)的概率為74%。

var prizeWeight = [1, 5, 20, 74]; //獎(jiǎng)項(xiàng)權(quán)重?cái)?shù)組,表征各獎(jiǎng)項(xiàng)的中獎(jiǎng)機(jī)會(huì)占總數(shù)的百分比。比如一等獎(jiǎng)的中獎(jiǎng)率是1%,二等獎(jiǎng)的中獎(jiǎng)率是5%

如果抽獎(jiǎng)活動(dòng)設(shè)置的獎(jiǎng)項(xiàng)更多,開發(fā)者也可以相應(yīng)擴(kuò)展權(quán)重?cái)?shù)組的和值,比如權(quán)重和值為500,1000等,并相應(yīng)設(shè)置數(shù)組元素來表征每抽500次,可中多少次、什么等級(jí)的獎(jiǎng)項(xiàng)。

另外,開發(fā)者也可以將獎(jiǎng)項(xiàng)名稱與獎(jiǎng)項(xiàng)權(quán)重?cái)?shù)組合并聲明在一個(gè)對(duì)象中:

//設(shè)置獎(jiǎng)項(xiàng)名稱、權(quán)重等數(shù)組var prizes = [ {'name': '一等獎(jiǎng)', 'weight': 1}, {'name': '二等獎(jiǎng)', 'weight': 5}, {'name': '三等獎(jiǎng)', 'weight': 20}, {'name': '未中獎(jiǎng)', 'weight': 74}];1.3、抽獎(jiǎng)活動(dòng)規(guī)則 0 < 本次抽獎(jiǎng)隨機(jī)數(shù) <= 1,表示抽中一等獎(jiǎng); 1 < 本次抽獎(jiǎng)隨機(jī)數(shù) <= 5,表示抽中二等獎(jiǎng); 5 < 本次抽獎(jiǎng)隨機(jī)數(shù) <= 20,表示抽中三等獎(jiǎng); 本次抽獎(jiǎng)隨機(jī)數(shù) > 20,表示未中獎(jiǎng)。二、實(shí)現(xiàn)原理

因?yàn)楸疚氖呛?jiǎn)單實(shí)現(xiàn),本抽獎(jiǎng)程序的原理也設(shè)計(jì)得較為簡(jiǎn)單:

根據(jù)權(quán)重?cái)?shù)組的和值(weightSum),在每次抽獎(jiǎng)時(shí)生成一個(gè)權(quán)重隨機(jī)數(shù)(weightRandom),這個(gè)權(quán)重隨機(jī)數(shù)(weightRandom)是介于 0-weightSum (權(quán)重和值)之間的,本文示例設(shè)置的權(quán)重?cái)?shù)組和值為100,表示生成的權(quán)重隨機(jī)數(shù)是介于 0-100 之間的; 然后讓這個(gè)權(quán)重隨機(jī)數(shù)(weightRandom)去和權(quán)重?cái)?shù)組中的所有元素值作比較,計(jì)算這個(gè)權(quán)重隨機(jī)數(shù)(weightRandom)位于哪兩個(gè)獎(jiǎng)項(xiàng)之間,符合哪條中獎(jiǎng)規(guī)則,對(duì)應(yīng)哪個(gè)獎(jiǎng)項(xiàng)名稱。

比如:某次抽獎(jiǎng)生成的權(quán)重隨機(jī)數(shù)(weightRandom)為15.15,按照 1.3 的活動(dòng)規(guī)則,因?yàn)?5 <15.15<= 20,表示此次生成的權(quán)重隨機(jī)數(shù)(weightRandom)可中三等獎(jiǎng)。

下面分別來實(shí)現(xiàn):

2.1、計(jì)算權(quán)重和值

//數(shù)組累加求和函數(shù):Array.reduce(function(prev ,cuurentValue), initialValue)var weightSum = prizeWeight.reduce(function(prev, currVal){ //計(jì)算權(quán)重之和:1+5+20+74=100 return prev + currVal; //prev 是前一次累加后的數(shù)值,currVal 是本次待加的數(shù)值}, 0);2.2、編寫抽獎(jiǎng)函數(shù)

根據(jù)權(quán)重和值 weightSum,生成介于0-weightSum之間的權(quán)重隨機(jī)數(shù)

//抽獎(jiǎng)函數(shù)var lottery = function(weightSum) { var res = '未中獎(jiǎng)'; //默認(rèn)設(shè)置抽獎(jiǎng)結(jié)果為“未中獎(jiǎng)” console.log('本程序的獎(jiǎng)項(xiàng)權(quán)重和值:', weightSum);//生成一個(gè)權(quán)重隨機(jī)數(shù),介于0-weightSum之間 var random = Math.random()*weightSum; //生成一個(gè)權(quán)重隨機(jī)數(shù)(0 到 weightSum 之間) console.log('本次抽獎(jiǎng)的權(quán)重隨機(jī)數(shù):', random);//權(quán)重?cái)?shù)組重組并排序 var concatWeightArr = prizeWeight.concat(random); //將隨機(jī)數(shù)加入權(quán)重?cái)?shù)組 var sortedWeightArr = concatWeightArr.sort(function(a, b){return a-b;}); //將包含隨機(jī)數(shù)的新權(quán)重?cái)?shù)組按從小到大(升序)排序 console.log('含權(quán)重隨機(jī)數(shù)的新權(quán)重?cái)?shù)組升序排序后:', sortedWeightArr);//索引權(quán)重隨機(jī)數(shù)的數(shù)組下標(biāo) var randomIndex = sortedWeightArr.indexOf(random); //索引隨機(jī)數(shù)在新權(quán)重?cái)?shù)組中的位置 randomIndex = Math.min(randomIndex, prizes.length -1); //權(quán)重隨機(jī)數(shù)的下標(biāo)不得超過獎(jiǎng)項(xiàng)數(shù)組的長(zhǎng)度-1,重新計(jì)算隨機(jī)數(shù)在獎(jiǎng)項(xiàng)數(shù)組中的索引位置 console.log('本次權(quán)重隨機(jī)數(shù)對(duì)應(yīng)的數(shù)組下標(biāo):', randomIndex);//取出對(duì)應(yīng)獎(jiǎng)項(xiàng) res = prizes[randomIndex]; //從獎(jiǎng)項(xiàng)數(shù)組中取出本次抽獎(jiǎng)結(jié)果 console.log('本次抽獎(jiǎng)結(jié)果:', res);return {'weightSum': weightSum , 'weightRandom': random, prizeIndex: randomIndex, 'data': res}; //返回本次抽獎(jiǎng)結(jié)果};

需要說明的是:

(1)在抽獎(jiǎng)函數(shù)中,首先生成一個(gè)權(quán)重隨機(jī)數(shù)(random),然后將這個(gè)權(quán)重隨機(jī)數(shù)(random)與原權(quán)重?cái)?shù)組合并(使用 Array.concat() 函數(shù),返回值是一個(gè)新數(shù)組,原權(quán)重?cái)?shù)組不變),生成一個(gè)新權(quán)重?cái)?shù)組,并將新權(quán)重?cái)?shù)組按照數(shù)值從小到大(升序)來排序(使用 Array.sort() 函數(shù));這樣,權(quán)重隨機(jī)數(shù)(random)按照大小順序,就會(huì)落在某兩個(gè)獎(jiǎng)項(xiàng)權(quán)重?cái)?shù)值之間。最后索引權(quán)重隨機(jī)數(shù)(random)在新權(quán)重?cái)?shù)組中的下標(biāo),就可以取出對(duì)應(yīng)的獎(jiǎng)項(xiàng)名稱數(shù)組中的元素。

(2)比如:某次抽獎(jiǎng)函數(shù)生成的權(quán)重隨機(jī)數(shù)為15.15,與原來的權(quán)重?cái)?shù)組:[1, 5, 20, 74] 合并,并排序,將得到新權(quán)重?cái)?shù)組:[1, 5,15.15,20, 74],權(quán)重隨機(jī)數(shù)(15.15)落在 5-20 之間,權(quán)重隨機(jī)數(shù)(15.15)在新權(quán)重?cái)?shù)組中的下標(biāo)是 2,對(duì)應(yīng)取出獎(jiǎng)項(xiàng)名稱數(shù)組下標(biāo)為 2 的元素:prizes[2] = '三等獎(jiǎng)'。由此判斷本次抽獎(jiǎng)可中三等獎(jiǎng)。

(3)在抽獎(jiǎng)函數(shù)中,為了確定權(quán)重隨機(jī)數(shù)(random)的大小對(duì)應(yīng)何種獎(jiǎng)項(xiàng)時(shí),即比較權(quán)重隨機(jī)數(shù)與權(quán)重?cái)?shù)組中各元素?cái)?shù)值的大小時(shí),編者沒有使用傳統(tǒng)的 for 循環(huán)來遍歷比較權(quán)重隨機(jī)數(shù)(random)與 prizeWeight 數(shù)組中各元素的大小,而是合并生成新的權(quán)重?cái)?shù)組并排序,再使用 Array.indexOf() 函數(shù)來索引權(quán)重隨機(jī)數(shù)(random)的下標(biāo),這個(gè)下標(biāo)對(duì)應(yīng)的獎(jiǎng)項(xiàng)名稱也就取出了。

三、項(xiàng)目完整代碼

本示例項(xiàng)目js部分核心代碼:

//layui 模塊化引用layui.use([’jquery’, ’util’], function(){ var $ = layui.$, util = layui.util;//設(shè)置獎(jiǎng)項(xiàng)名稱、權(quán)重、中獎(jiǎng)次數(shù)等數(shù)組 var prizes = ['一等獎(jiǎng)', '二等獎(jiǎng)', '三等獎(jiǎng)', '未中獎(jiǎng)']; //獎(jiǎng)項(xiàng)名稱數(shù)組 var prizeWeight = [1, 5, 20, 74]; //獎(jiǎng)項(xiàng)權(quán)重?cái)?shù)組,表征各獎(jiǎng)項(xiàng)的中獎(jiǎng)機(jī)會(huì)占總數(shù)的百分比。比如一等獎(jiǎng)的中獎(jiǎng)率是1%,二等獎(jiǎng)的中獎(jiǎng)率是5% //開發(fā)者也可合并聲明獎(jiǎng)項(xiàng)名稱、權(quán)重等數(shù)組在一個(gè)對(duì)象中 //var prizes = [ // {'name': '一等獎(jiǎng)', 'weight': 1}, // {'name': '二等獎(jiǎng)', 'weight': 5}, // {'name': '三等獎(jiǎng)', 'weight': 20}, // {'name': '未中獎(jiǎng)', 'weight': 74} //];//數(shù)組累加求和函數(shù):Array.reduce(function(prev ,cuurentValue), initialValue) var weightSum = prizeWeight.reduce(function(prev, currVal){ //計(jì)算權(quán)重之和:1+5+20+74=100return prev + currVal; //prev 是前一次累加后的數(shù)值,currVal 是本次待加的數(shù)值 }, 0); document.getElementById('weightSum').innerhtml = weightSum; //設(shè)置權(quán)重和值//抽獎(jiǎng)函數(shù) var lottery = function(weightSum) {var res = '未中獎(jiǎng)'; //默認(rèn)設(shè)置抽獎(jiǎng)結(jié)果為“未中獎(jiǎng)”console.log('本程序的獎(jiǎng)項(xiàng)權(quán)重和值:', weightSum);//生成一個(gè)權(quán)重隨機(jī)數(shù),介于0-weightSum之間var random = Math.random()*weightSum; //生成一個(gè)權(quán)重隨機(jī)數(shù)(0 到 weightSum 之間)console.log('本次抽獎(jiǎng)的權(quán)重隨機(jī)數(shù):', random);//權(quán)重?cái)?shù)組重組并排序var concatWeightArr = prizeWeight.concat(random); //將隨機(jī)數(shù)加入權(quán)重?cái)?shù)組var sortedWeightArr = concatWeightArr.sort(function(a, b){return a-b;}); //將包含隨機(jī)數(shù)的新權(quán)重?cái)?shù)組按從小到大(升序)排序console.log('含權(quán)重隨機(jī)數(shù)的新權(quán)重?cái)?shù)組升序排序后:', sortedWeightArr);//索引權(quán)重隨機(jī)數(shù)的數(shù)組下標(biāo)var randomIndex = sortedWeightArr.indexOf(random); //索引隨機(jī)數(shù)在新權(quán)重?cái)?shù)組中的位置randomIndex = Math.min(randomIndex, prizes.length -1); //權(quán)重隨機(jī)數(shù)的下標(biāo)不得超過獎(jiǎng)項(xiàng)數(shù)組的長(zhǎng)度-1,重新計(jì)算隨機(jī)數(shù)在獎(jiǎng)項(xiàng)數(shù)組中的索引位置console.log('本次權(quán)重隨機(jī)數(shù)對(duì)應(yīng)的數(shù)組下標(biāo):', randomIndex);//取出對(duì)應(yīng)獎(jiǎng)項(xiàng)res = prizes[randomIndex]; //從獎(jiǎng)項(xiàng)數(shù)組中取出本次抽獎(jiǎng)結(jié)果console.log('本次抽獎(jiǎng)結(jié)果:', res);return {'weightSum': weightSum , 'weightRandom': random, prizeIndex: randomIndex, 'data': res}; //返回本次抽獎(jiǎng)結(jié)果 }; //注冊(cè)按鈕事件 $(’.layui-btn[data-type='save']’).on(’click’, function () {var res = lottery(weightSum);document.getElementById('dateNow').innerhtml = util.toDateString(new Date()); //輸出本次抽獎(jiǎng)時(shí)間document.getElementById('weightRandom').innerHTML = res.weightRandom; //輸出本次抽獎(jiǎng)的權(quán)重隨機(jī)數(shù)document.getElementById('printData').innerHTML = res.data; //輸出本次抽獎(jiǎng)結(jié)果//重置中獎(jiǎng)規(guī)則文字的字體顏色 $(’.rule-body>p’).css('color', 'inherit');$(’.rule-body>p:eq(’ + res.prizeIndex + ’)’).css('color', 'red'); });});

以上就是JS根據(jù)獎(jiǎng)品權(quán)重計(jì)算中獎(jiǎng)概率的詳細(xì)內(nèi)容,更多關(guān)于JS計(jì)算中獎(jiǎng)概率的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美天堂一区二区| 国产伦理一区| 国产精品伦理久久久久久| 国产午夜一区| 国产精品sss在线观看av| 国产日韩1区| 欧美国产极品| 精品国产aⅴ| 国产伦久视频在线观看| 午夜精品成人av| 五月天av在线| 色婷婷精品视频| 亚洲国产综合在线看不卡| 91久久国产| 日韩中文字幕区一区有砖一区| 国产亚洲综合精品| 中文字幕av一区二区三区人| 日韩高清在线一区| 欧美日韩91| 国产91在线精品| 久久中文亚洲字幕| 免费黄网站欧美| 欧美日韩夜夜| 成人一区不卡| 欧美在线资源| 亚洲欧美网站在线观看| 日本特黄久久久高潮| 国产精品白丝一区二区三区| 精品久久福利| 久久精品国产www456c0m| 精品91久久久久| 欧美日韩1区2区3区| 国产中文字幕一区二区三区| 久久国产精品成人免费观看的软件| 99亚洲精品| 国产精品羞羞答答在线观看| 成人精品亚洲| 亚洲人成亚洲精品| 久久精品免视看国产成人| 久久精品不卡| 婷婷精品在线观看| 精品不卡一区| 国产亚洲综合精品| 国产极品久久久久久久久波多结野| 波多野结衣久久精品| 老色鬼久久亚洲一区二区| 国产精品香蕉| 日韩一级不卡| 国产精品chinese| 99精品视频在线观看免费播放| 先锋影音国产一区| 精品中文在线| 日韩中文字幕91| 美女久久99| 国产精品美女| 免费在线亚洲欧美| 亚洲手机视频| 国产精品久久久久av蜜臀| 亚洲国产综合在线看不卡| 国产视频一区二区在线播放| 久久高清免费| 三上悠亚国产精品一区二区三区 | 国产高清不卡| 久久亚洲二区| 免费在线成人网| 捆绑调教日本一区二区三区| 精品亚洲自拍| 日韩中文字幕不卡| 日韩一区二区在线免费| 日韩国产一区二| 免费欧美一区| 精品国产三区在线| 中文字幕一区日韩精品| 韩国精品主播一区二区在线观看| 日本91福利区| 国产精品日本| 国产亚洲一区二区手机在线观看| 欧美精品国产| 丝袜a∨在线一区二区三区不卡 | 久久97久久97精品免视看秋霞| 国产精品嫩草99av在线| 日韩a一区二区| 欧美一级二级三级视频| 99re国产精品| 精品亚洲美女网站| 麻豆久久一区二区| 亚洲影院天堂中文av色| 久久要要av| 福利片在线一区二区| 国产欧美二区| 日本一区中文字幕| 99在线精品免费视频九九视| 日韩久久精品| 国产一区调教| 欧美日韩18| 亚洲精品系列| 在线亚洲精品| 国产精品日本一区二区不卡视频| 亚洲精品高潮| 在线精品视频一区| 国产婷婷精品| 亚洲精品a级片| 久久三级福利| 午夜精品一区二区三区国产| 日韩成人高清| 日韩精品专区| 日本午夜大片a在线观看| 国产专区精品| 国产一区二区三区天码| 国产毛片精品久久| 日韩av成人高清| 日韩精品中文字幕吗一区二区 | 国产在线观看www| 精品国产欧美| 高清一区二区| 成人va天堂| 久久国产小视频| 美女少妇全过程你懂的久久| 欧美 日韩 国产一区二区在线视频| 成人羞羞视频播放网站| 99久久久国产精品美女| 婷婷成人综合| 亚洲韩日在线| 红桃视频欧美| 一本一道久久a久久| 日韩影片在线观看| 色综合视频一区二区三区日韩 | 青青草国产成人99久久| 日本在线一区二区三区| 日本免费在线视频不卡一不卡二| 日韩高清不卡一区| 国产乱子精品一区二区在线观看 | 欧美亚洲tv| 国产一精品一av一免费爽爽| 欧美日韩 国产精品| 国产精品www.| 国产一区一一区高清不卡| 亚洲天堂av影院| 亚洲91久久| 亚洲欧美网站| 欧美亚洲自偷自偷| 精品美女在线视频| 精品捆绑调教一区二区三区| 在线综合欧美| 婷婷久久免费视频| 国产精品地址| 四虎4545www国产精品| 一区在线免费| 在线精品国产亚洲| 欧美在线观看天堂一区二区三区| 久久久亚洲欧洲日产| 日韩欧美午夜| 视频一区视频二区在线观看| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精品久久久久久久久久久久久久久 | 亚洲精品日韩久久| 欧美黄页在线免费观看| 午夜精品久久久久久久久久蜜桃| 亚洲激情黄色| 欧美日韩一区自拍| 97精品国产| 极品日韩av| 日本国产欧美| 国产精品久久久久久久免费观看 | 美女视频黄久久| 欧美色图国产精品| 日韩精品免费视频人成| 激情中国色综合| 影视先锋久久| 日韩av中文字幕一区二区| 国产不卡一区| 美日韩精品视频| 麻豆精品在线| 99成人在线| 精品中文字幕一区二区三区| 一本色道久久精品| 国产精品亲子伦av一区二区三区 | 中文不卡在线| 美女精品一区二区| 怡红院精品视频在线观看极品| 国产日韩欧美高清免费| 丝袜av一区| 97se亚洲| 蜜桃tv一区二区三区| 久久精品xxxxx| 欧美成人高清| 国产精品成人自拍| 日韩午夜高潮| 国产一区二区三区黄网站| 蜜芽一区二区三区| 不卡专区在线| 日韩精品一区二区三区中文| 欧美aa在线观看| 日本欧美一区二区在线观看| 蜜桃精品在线| 国产欧美欧美| 日韩制服丝袜先锋影音| 日韩av一级| 欧美国产日韩电影| 亚洲一区区二区|