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

您的位置:首頁技術文章
文章詳情頁

JS根據獎品權重計算中獎概率

瀏覽:218日期:2024-03-28 10:28:00
一、示例場景1.1、設置抽獎活動的獎項名稱

獎項名稱:['一等獎', '二等獎', '三等獎', '未中獎']。假設抽獎活動設置了這四個獎項,當然開發者可以擴展更多。

var prizes = ['一等獎','二等獎','三等獎','未中獎']; //獎項名稱數組1.2、設置各獎項權重

獎項權重:[1, 5, 20, 74]。獎項權重主要用來表征各獎項的中獎幾率,這里獎項權重數組的和值為100(=1+5+20+74),其中1表示一等獎的中獎概率為1%;5表示一等獎的中獎概率為5%;20表示三等獎的中獎概率為20%;最后剩下的74表示未中獎的概率為74%。

var prizeWeight = [1, 5, 20, 74]; //獎項權重數組,表征各獎項的中獎機會占總數的百分比。比如一等獎的中獎率是1%,二等獎的中獎率是5%

如果抽獎活動設置的獎項更多,開發者也可以相應擴展權重數組的和值,比如權重和值為500,1000等,并相應設置數組元素來表征每抽500次,可中多少次、什么等級的獎項。

另外,開發者也可以將獎項名稱與獎項權重數組合并聲明在一個對象中:

//設置獎項名稱、權重等數組var prizes = [ {'name': '一等獎', 'weight': 1}, {'name': '二等獎', 'weight': 5}, {'name': '三等獎', 'weight': 20}, {'name': '未中獎', 'weight': 74}];1.3、抽獎活動規則 0 < 本次抽獎隨機數 <= 1,表示抽中一等獎; 1 < 本次抽獎隨機數 <= 5,表示抽中二等獎; 5 < 本次抽獎隨機數 <= 20,表示抽中三等獎; 本次抽獎隨機數 > 20,表示未中獎。二、實現原理

因為本文是簡單實現,本抽獎程序的原理也設計得較為簡單:

根據權重數組的和值(weightSum),在每次抽獎時生成一個權重隨機數(weightRandom),這個權重隨機數(weightRandom)是介于 0-weightSum (權重和值)之間的,本文示例設置的權重數組和值為100,表示生成的權重隨機數是介于 0-100 之間的; 然后讓這個權重隨機數(weightRandom)去和權重數組中的所有元素值作比較,計算這個權重隨機數(weightRandom)位于哪兩個獎項之間,符合哪條中獎規則,對應哪個獎項名稱。

比如:某次抽獎生成的權重隨機數(weightRandom)為15.15,按照 1.3 的活動規則,因為 5 <15.15<= 20,表示此次生成的權重隨機數(weightRandom)可中三等獎。

下面分別來實現:

2.1、計算權重和值

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

根據權重和值 weightSum,生成介于0-weightSum之間的權重隨機數

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

需要說明的是:

(1)在抽獎函數中,首先生成一個權重隨機數(random),然后將這個權重隨機數(random)與原權重數組合并(使用 Array.concat() 函數,返回值是一個新數組,原權重數組不變),生成一個新權重數組,并將新權重數組按照數值從小到大(升序)來排序(使用 Array.sort() 函數);這樣,權重隨機數(random)按照大小順序,就會落在某兩個獎項權重數值之間。最后索引權重隨機數(random)在新權重數組中的下標,就可以取出對應的獎項名稱數組中的元素。

(2)比如:某次抽獎函數生成的權重隨機數為15.15,與原來的權重數組:[1, 5, 20, 74] 合并,并排序,將得到新權重數組:[1, 5,15.15,20, 74],權重隨機數(15.15)落在 5-20 之間,權重隨機數(15.15)在新權重數組中的下標是 2,對應取出獎項名稱數組下標為 2 的元素:prizes[2] = '三等獎'。由此判斷本次抽獎可中三等獎。

(3)在抽獎函數中,為了確定權重隨機數(random)的大小對應何種獎項時,即比較權重隨機數與權重數組中各元素數值的大小時,編者沒有使用傳統的 for 循環來遍歷比較權重隨機數(random)與 prizeWeight 數組中各元素的大小,而是合并生成新的權重數組并排序,再使用 Array.indexOf() 函數來索引權重隨機數(random)的下標,這個下標對應的獎項名稱也就取出了。

三、項目完整代碼

本示例項目js部分核心代碼:

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

以上就是JS根據獎品權重計算中獎概率的詳細內容,更多關于JS計算中獎概率的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩欧美中文字幕在线视频| 亚洲精品在线影院| 最新亚洲激情| 亚洲在线电影| 青青草国产精品亚洲专区无| 久久成人福利| 日韩在线看片| 国产亚洲精品自拍| 国产香蕉精品| 亚洲黄色免费av| 好吊视频一区二区三区四区| 日本欧美不卡| 男女激情视频一区| 国产日韩在线观看视频| 亚洲黄色免费看| 亚洲一区二区三区高清| 日韩av资源网| 亚洲三级欧美| 综合欧美精品| 亚洲精品福利电影| 亚洲毛片网站| 色在线中文字幕| 天堂精品久久久久| 久久电影tv| 视频精品一区| 午夜av成人| 五月激激激综合网色播| www.九色在线| 日韩精品免费一区二区夜夜嗨| 国产日韩欧美在线播放不卡| 国产精久久久| 亚洲免费精品| 国产精品magnet| 婷婷综合在线| 青青草91视频| 蜜桃视频欧美| 国产精品久久久久久久久久久久久久久| 今天的高清视频免费播放成人| 四虎精品一区二区免费| 国产 日韩 欧美 综合 一区| 免费日韩av片| 久久国产三级| 在线一区视频| 国产成人精品亚洲日本在线观看| 老牛影视精品| 天堂av一区| 欧美日韩四区| 国产在线看片免费视频在线观看| 免费日韩成人| 九九综合九九| 精品一区视频| 日韩美女国产精品| 亚洲激精日韩激精欧美精品| 国内一区二区三区| 日本成人在线网站| 亚洲一区二区小说| 久久国产影院| 国产99在线| 免费日韩一区二区三区| 亚洲区国产区| 五月天激情综合网| 欧美精选视频一区二区| 精品国产精品国产偷麻豆 | 日韩中文欧美在线| 久久精品国产999大香线蕉| 亚洲欧美日韩专区| 日韩国产一区| 韩国女主播一区二区三区| 日韩欧美精品一区二区综合视频| 国产精品久久久久9999高清| 99久久视频| 91看片一区| 成人日韩在线观看| 午夜av成人| 99精品视频在线观看免费播放| 99国产精品| 九色porny丨国产首页在线| 激情综合婷婷| 精品91福利视频| 精品日产乱码久久久久久仙踪林| 三级在线看中文字幕完整版| 国产精品一国产精品| 一区二区日韩免费看| 亚洲专区欧美专区| 中日韩男男gay无套| 91精品福利| 亚洲精品91| 亚洲免费成人| 免费成人性网站| 综合激情五月婷婷| 日韩免费精品| 国产伦理一区| 久久影视三级福利片| 久久久免费人体| 精品九九在线| 蜜臀久久精品| 一区在线免费| 一本色道精品久久一区二区三区| 婷婷成人av| 婷婷久久免费视频| 国产一卡不卡| 成人在线黄色| av中文字幕在线观看第一页| 亚洲黄色网址| 欧美 日韩 国产一区二区在线视频| 蜜臀久久久久久久| 日韩av成人高清| 国产极品模特精品一二| 成人午夜亚洲| 神马日本精品| av不卡在线看| 日韩avvvv在线播放| 欧美日韩va| 亚洲天堂av影院| 国产精品社区| 欧美一级二级三级视频| 麻豆久久久久久| 久久久久.com| 日韩一区精品视频| 亚洲激精日韩激精欧美精品| av资源中文在线| 亚洲一区二区三区免费在线观看| 日韩精品国产欧美| 久久国产麻豆精品| 亚洲国产成人二区| 久久亚洲视频| 免费在线欧美黄色| 在线一区视频观看| 中文字幕av一区二区三区人| 老司机精品视频在线播放| 国产理论在线| 一区二区精品| 福利一区二区三区视频在线观看| 日韩高清在线观看一区二区| 欧美aaaaaa午夜精品| 欧美日韩一区二区综合| 婷婷综合一区| 91视频精品| 亚洲毛片视频| 日韩久久电影| 涩涩涩久久久成人精品| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 国产欧美自拍一区| 国产成人精选| 亚洲精品va| 狂野欧美性猛交xxxx| 国产偷自视频区视频一区二区| 国产一区清纯| 日韩成人午夜精品| 天堂√中文最新版在线| 亚洲精品日本| 日韩精品免费一区二区在线观看| 日韩av片子| 老司机精品久久| 成人精品久久| 亚洲精品进入| 欧美精品资源| 国产日产精品_国产精品毛片 | 亚洲性图久久| 欧美偷窥清纯综合图区| 久久亚洲精品中文字幕蜜潮电影| 国际精品欧美精品| 尹人成人综合网| 久久精品毛片| 亚洲我射av| 免费视频国产一区| 久久精品资源| 日韩欧美另类中文字幕| 欧美日韩国产综合网| 在线一区av| 精品久久久网| 国产精品夜夜夜| 日韩午夜视频在线| 欧美日韩国产欧| 91精品综合| 高清不卡亚洲| 久草精品视频| 久久国产精品免费精品3p| 日韩影院精彩在线| 亚洲午夜av| 久久久久国产精品一区三寸| 久久亚洲黄色| 美女视频一区在线观看| 日韩av中文在线观看| 美女精品一区| 亚洲资源av| 好吊日精品视频| 婷婷综合亚洲| 日韩午夜一区| 国产精品毛片| 在线成人直播| 九九综合九九| 欧美日韩国产一区二区三区不卡 | 日韩欧美一区免费| 青草国产精品久久久久久| 中文字幕一区二区精品区| 色88888久久久久久影院| 日韩a一区二区| 色综合五月天| 中文字幕在线视频网站|