基于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 相关文章推荐
Array.slice()与Array.splice()的返回值类型
Oct 09 Javascript
关于javascript 回调函数中变量作用域的讨论
Sep 11 Javascript
固定表格行列(expression)在IE下适用
Jul 25 Javascript
jQuery原型属性和原型方法详解
Jul 07 Javascript
jquery判断当前浏览器的实现代码
Nov 07 Javascript
JS读写CSS样式的方法汇总
Aug 16 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
Mar 02 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
May 11 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
Oct 26 Javascript
利用百度地图API获取当前位置信息的实例
Nov 06 Javascript
js实现删除li标签一行内容
Apr 16 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
Jul 28 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
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
3个PHP多维数组转为一维数组的方法实例
2014/03/13 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
javascript实现无限级select联动菜单
2015/01/02 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
js获取及判断键盘按键的方法
2015/12/01 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
vue-router路由简单案例介绍
2017/02/21 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
详解Nodejs mongoose
2018/06/10 NodeJs
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
2019/09/10 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
[01:05:40]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第三场
2014/05/24 DOTA
python实现dict版图遍历示例
2014/02/19 Python
python数据结构之二叉树的遍历实例
2014/04/29 Python
Python中规范定义命名空间的一些建议
2016/06/04 Python
Python3实现并发检验代理池地址的方法
2016/09/18 Python
在NumPy中创建空数组/矩阵的方法
2018/06/15 Python
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
python按键按住不放持续响应的实例代码
2019/07/17 Python
凯撒娱乐:Caesars Entertainment
2018/02/23 全球购物
Right-on官方网站:日本知名的休闲服装品牌
2019/07/12 全球购物
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
联想印度官方网上商店:Lenovo India
2019/08/24 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
2014年公务员思想汇报范文:全心全意为人民服务
2014/03/06 职场文书
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python