<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>红包分配</title>
</head>
<script>
/*基本思想,在第一个人点击红包的时候就执行函数,生成随机金额数组,
等于之后每个人金额其实早就已经默认确定.然后依次点击时展示对应金额即可*/
function Divide(people, totalMoney, maxMoney, minMoney) {
/*人数,总金额,单人上限,单人下限*/
var arr = [];
ntotalMoney = totalMoney * 100; /*金额都扩大100倍,方便计算*/
nmaxMoney = maxMoney * 100; /*金额都扩大100倍,方便计算*/
nminMoney = minMoney * 100; /*金额都扩大100倍,方便计算*/
for (i = 0; i < people - 1; i++) {
/*每个人的随机金额,单人最小金额到最大金额之前*/
arr[i] = Math.ceil(nminMoney + Math.random() * (nmaxMoney - nminMoney));
ntotalMoney -= arr[i];
}
/*最后一个人*/
arr[people - 1] = ntotalMoney;
/*最后一个人如超过上限或者低于下限,就重新分。
这里要注意分配的合理性,如果下限的值都大于上限值,自然无法分配*/
if (arr[people - 1] > nmaxMoney || arr[people - 1] < nminMoney) {
return Divide(people, totalMoney, maxMoney, minMoney);
}
return arr.map(function (v) {
return v = v / 100; /*除以100返回正确金额数组*/
});
}
console.log(Divide(10, 40, 8, 2));
</script>
<body>
</body>
</html>