将一个数随机分配(微信红包算法)
比如将100随机分配为10个,最小1,最大12
PS:下面是我的实现方式(先生成一个10个数的数组,每个数组元素都是1,然后再进入循环,随机生成一个数组下标进行 +1,如果当前数组元素超过最大数12则不进行叠加)
/ 最小1%, 最大12% /
function ranAllo(value, min, max, length) {
var ran = [], arrId;
//循环存放数组最小值
for(var i = 0; i < length; i++) {
ran[i] = min;
}
//计算剩下的值
var spare = value - (min * length);
while(spare > 0) {
//生成数组随机ID
arrId = Math.round(Math.random() * length);
if(ran[arrId] < max) {
ran[arrId] += 1;
spare--;
}
}
console.log(ran);
return ran
}
ranAllo(100, 1, 12, 10);
但是这种实现方式的性能比较低,请问有没有其他比较好的实现方式
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
运行结果(还真有背时运气的,才得1)
比如数组前7个就在12上下浮动,剩下3随机余下金额的。你这个时间不说,而且有些浪费资源。。。