基于js實(shí)現(xiàn)抽紅包并分配代碼實(shí)例
這篇文章主要介紹了基于js實(shí)現(xiàn)抽紅包并分配代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
將 50000元隨機(jī)分給10個(gè)人,其中3個(gè)人必須分到百位數(shù),4個(gè)人分到千位數(shù),3個(gè)人分到萬(wàn)位數(shù),每個(gè)人所得金額
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> </head> <body> 將 50000元隨機(jī)分給10個(gè)人,其中3個(gè)人必須分到百位數(shù),4個(gè)人分到千位數(shù),3個(gè)人分到萬(wàn)位數(shù),每個(gè)人所得金額 </body> <script type="text/javascript"> /** * * @param {Object} amount 總數(shù)錢 * @param {Object} list [2,2,2,3,3,3,3,4,4,4] 3個(gè)百位,4個(gè)千位,3個(gè)萬(wàn)位 */ //不要小數(shù) function devide(amount,list){ var len = list.length; //先計(jì)算所有的自身位數(shù)范圍 var arr = []; for(var i = 0; i < len; i++){ var item = getRange(list[i]); arr.push(item); } var res = []; //只算n-1位,剩下最后一個(gè),不用計(jì)算 for(var i = 0; i < len-1; i++){ var index = Math.floor(Math.random() * arr.length); //隨機(jī)獲取一個(gè),然后用來(lái)取 var item = arr.splice(index,1)[0]; //取出當(dāng)前需要發(fā)的紅包位數(shù) var result = calc(amount,item,arr); if(result){ res.push(result); amount = amount - result; }else{ return []; } } if(arr[0].start > amount || arr[0].end < amount){ console.warn("分配出現(xiàn)錯(cuò)誤,請(qǐng)重新規(guī)劃分配方案"); return []; } res.push(amount); return res; } function calc(amount,item,arr){ //當(dāng)其他的都取最小值時(shí)的總和,為了保證每個(gè)都分到 var otherRange = getOtherRange(arr); var minStart = otherRange.countStart; var maxEnd = otherRange.countEnd; var mins = amount - minStart; //剩余可取 var end = item.end; var start = item.start; if(start > mins){ console.warn("分配出現(xiàn)錯(cuò)誤,請(qǐng)重新規(guī)劃分配方案"); return false; }else if(end > mins){ //如果最大范圍大于剩余的 end = mins; } //則隨機(jī)抽取從 start至end var result = Math.floor(Math.random()*(end-start) + start); if(amount - result > maxEnd){ //取的值太小,其他的取最大值也分不完 console.warn("分配出現(xiàn)錯(cuò)誤,請(qǐng)重新規(guī)劃分配方案"); } return result; } //獲取某位的范圍 function getRange(item){ return { start:Math.pow(10,item), //比如百位2,這里最小就是100 end: Math.pow(10,item+1) - 1 //百位最大為 1000-1 } } //獲取所有的范圍 function getOtherRange(arr){ var countStart = 0; var countEnd = 0; for(var i = 0; i < arr.length; i++){ countStart += arr[i].start; countEnd += arr[i].end; } return { countStart, countEnd }; } console.log(devide(50000,[2,2,2,3,3,3,3,4,4,4])) </script> </html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 使用AutoJs實(shí)現(xiàn)微信搶紅包的代碼
- js canvas實(shí)現(xiàn)紅包照片效果
- js+css實(shí)現(xiàn)紅包雨效果
- JavaScript實(shí)現(xiàn)微信紅包算法及問(wèn)題解決方法
- 利用adb shell和node.js實(shí)現(xiàn)抖音搶紅包功能(推薦)
- Javascript網(wǎng)頁(yè)搶紅包外掛實(shí)現(xiàn)分享
- js實(shí)現(xiàn)微信/QQ直接跳轉(zhuǎn)到支付寶APP打開口令領(lǐng)紅包功能
- js仿微信搶紅包功能
- 基于JavaScript實(shí)現(xiàn)微信搶紅包功能
- js實(shí)現(xiàn)指定紅包順序和金額算法
相關(guān)文章
JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉樹的刪除算法示例
這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉樹的刪除算法,簡(jiǎn)單分析了javascript刪除數(shù)據(jù)結(jié)構(gòu)中二叉樹節(jié)點(diǎn)時(shí)所遇到的各種情況與相關(guān)的處理原理與算法實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-04-04JavaScript中Array實(shí)例方法filter的實(shí)現(xiàn)原理
filter() 方法創(chuàng)建一個(gè)新數(shù)組,其中包含通過(guò)所提供函數(shù)實(shí)現(xiàn)的測(cè)試的所有元素,本文將給大家介紹JavaScript中Array實(shí)例方法filter的實(shí)現(xiàn)原理,文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-03-03Cropper.js進(jìn)階之裁剪后保存至服務(wù)器實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Cropper.js進(jìn)階之裁剪后保存至服務(wù)器實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05使用ionic在首頁(yè)新聞中應(yīng)用到的跑馬燈效果的實(shí)現(xiàn)方法
在app中經(jīng)常會(huì)有滾動(dòng)的跑馬燈效果的運(yùn)用,接下來(lái)通過(guò)本文給大家介紹使用ionic在首頁(yè)新聞中應(yīng)用到的跑馬燈效果的實(shí)現(xiàn)方法,需要的的朋友參考下2017-02-02javascript使用中為什么10..toString()正常而10.toString()出錯(cuò)呢
在JavaScript中為什么10..toString()正常,而10.toString()出錯(cuò)呢?這個(gè)問(wèn)題一直困擾著我,所抽時(shí)間搜集整理下,曬出來(lái)與大家分享感興趣的朋友可以了解下,希望對(duì)你們有幫助2013-01-01微信小程序之幾種常見的彈框提示信息實(shí)現(xiàn)詳解
這篇文章主要介紹了微信小程序之幾種常見的彈框提示信息實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07微信小程序中不同頁(yè)面?zhèn)鬟f參數(shù)的操作方法
這篇文章主要介紹了微信小程序中不同頁(yè)面?zhèn)鬟f參數(shù)的操作方法,在開發(fā)項(xiàng)目中,避免不了不同頁(yè)面之間傳遞數(shù)據(jù)等,那么就需要進(jìn)行不同頁(yè)面之間的一個(gè)數(shù)據(jù)傳遞的,需要的朋友可以參考下2023-12-12