基于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 相关文章推荐
JavaScript入门教程(3) js面向对象
Jan 31 Javascript
jQuery live
May 15 Javascript
当前页禁止复制粘贴截屏代码小集
Jul 24 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
Dec 29 Javascript
Ionic实现仿通讯录点击滑动及$ionicscrolldelegate使用分析
Jan 18 Javascript
jQuery实现三级菜单的代码
May 09 Javascript
微信小程序 在线支付功能的实现
Mar 14 Javascript
bootstrap table表格客户端分页实例
Aug 07 Javascript
Vue 中axios配置实例详解
Jul 27 Javascript
layui table设置前台过滤转义等方法
Aug 17 Javascript
微信小程序自定义tabBar的踩坑实践记录
Nov 06 Javascript
Javascript webpack动态import
Apr 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
php中截取字符串支持utf-8
2007/01/18 PHP
php递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
PHP开发注意事项总结
2015/02/04 PHP
PHP实现简易blog的制作
2016/10/24 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
Javascript中的数学函数
2007/04/04 Javascript
javascript 类方法定义还是有点区别
2009/04/15 Javascript
表单JS弹出填写提示效果代码
2011/04/16 Javascript
统计jQuery中各字符串出现次数的工具
2012/05/03 Javascript
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
AngularJS ng-style中使用filter
2016/09/21 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
vuex进阶知识点巩固
2018/05/20 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
layer ui 导入文件之前传入数据的实例
2019/09/23 Javascript
在Vue中创建可重用的 Transition的方法
2020/06/02 Javascript
使用Python解析JSON数据的基本方法
2015/10/15 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
浅析Python函数式编程
2018/10/06 Python
使用pip安装python库的多种方式
2019/07/31 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
python 实现Harris角点检测算法
2020/12/11 Python
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
英国领先品牌手动工具和电动工具供应商:Tooled Up
2018/11/24 全球购物
《翻越远方的大山》教学反思
2014/04/13 职场文书
学校2014年度工作总结
2014/12/06 职场文书
mysql left join快速转inner join的过程
2021/06/30 MySQL
Python list列表删除元素的4种方法
2021/11/01 Python