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


Posted in Javascript onSeptember 19, 2019

这篇文章主要介绍了基于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>

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

Javascript 相关文章推荐
Code: write(s,d) 输出连续字符串
Aug 19 Javascript
HTML5附件拖拽上传drop &amp; google.gears实现代码
Apr 28 Javascript
关于jquery性能最佳实践的讨论,与求教
Mar 30 Javascript
js关闭模态窗口刷新父页面或跳转页面
Dec 13 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
Jan 07 Javascript
JavaScript 模块的循环加载实现方法
Dec 13 Javascript
JS Array创建及concat()split()slice()的使用方法
Jun 03 Javascript
js无法获取到html标签的属性的解决方法
Jul 26 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
Sep 29 Javascript
React学习笔记之事件处理(二)
Jul 02 Javascript
vue实现重置表单信息为空的方法
Sep 29 Javascript
Angular 多级路由实现登录页面跳转(小白教程)
Nov 19 Javascript
Layui table field初始化加载时进行隐藏的方法
Sep 19 #Javascript
Vue 实例事件简单示例
Sep 19 #Javascript
微信小程序常用的3种提示弹窗实现详解
Sep 19 #Javascript
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
Sep 19 #Javascript
vue 设置 input 为不可以编辑的实现方法
Sep 19 #Javascript
node 标准输入流和输出流代码实例
Sep 19 #Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
Sep 19 #Javascript
You might like
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
一组PHP加密解密函数分享
2014/06/05 PHP
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
2019/10/11 PHP
摘自启点的main.js
2008/04/20 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
Vue中的methods、watch、computed的区别
2018/11/26 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
Python中利用sorted()函数排序的简单教程
2015/04/27 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
python八大排序算法速度实例对比
2017/12/06 Python
Python分支语句与循环语句应用实例分析
2019/05/07 Python
Pytorch之Variable的用法
2019/12/31 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
详解python中groupby函数通俗易懂
2020/05/14 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
2020/10/26 Python
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
医学护理系毕业生求职信
2013/10/01 职场文书
合作意向书模板
2014/03/31 职场文书
大学生助学金感谢信
2015/01/21 职场文书
结婚通知短信大全
2015/04/17 职场文书
导师鉴定意见
2015/06/05 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
Go语言读取txt文档的操作方法
2022/01/22 Golang
解决xampp安装后Apache无法启动
2022/03/21 Servers