基于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实现抽红包并分配代码实例 的全部内容, 来源链接: utcz.com/z/328346.html

回到顶部