JavaScript

超轻量级php框架startmvc

基于js实现抽红包并分配代码实例

更新时间:2020-09-13 23:42:01 作者:startmvc
这篇文章主要介绍了基于js实现抽红包并分配代码实例,文中通过示例代码介绍的非常详细,

这篇文章主要介绍了基于js实现抽红包并分配代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

将 50000元随机分给10个人,其中3个人必须分到百位数,4个人分到千位数,3个人分到万位数,每个人所得金额


<!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元随机分给10个人,其中3个人必须分到百位数,4个人分到千位数,3个人分到万位数,每个人所得金额
</body>
<script type="text/javascript"> 
 /**
 *
 * @param {Object} amount 总数钱
 * @param {Object} list [2,2,2,3,3,3,3,4,4,4] 3个百位,4个千位,3个万位
 */ 
 //不要小数
 function devide(amount,list){
 var len = list.length; 
 //先计算所有的自身位数范围
 var arr = [];
 for(var i = 0; i < len; i++){
 var item = getRange(list[i]);
 
 arr.push(item);
 } 
 var res = [];
 //只算n-1位,剩下最后一个,不用计算
 for(var i = 0; i < len-1; i++){
 var index = Math.floor(Math.random() * arr.length); //随机获取一个,然后用来取
 var item = arr.splice(index,1)[0]; //取出当前需要发的红包位数
 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("分配出现错误,请重新规划分配方案");
 return [];
 } 
 res.push(amount);
 return res;
 } 
 function calc(amount,item,arr){ 
 //当其他的都取最小值时的总和,为了保证每个都分到
 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("分配出现错误,请重新规划分配方案");
 return false;
 }else if(end > mins){
 //如果最大范围大于剩余的
 end = mins;
 } 
 //则随机抽取从 start至end 
 var result = Math.floor(Math.random()*(end-start) + start);
 
 if(amount - result > maxEnd){
 //取的值太小,其他的取最大值也分不完
 console.warn("分配出现错误,请重新规划分配方案");
 }
 
 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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

js 红包 分配