基于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 相关文章推荐
浅析node.js中close事件
Nov 26 Javascript
jquery仿QQ登录账号选择下拉框效果
Mar 22 Javascript
JS实现保留n位小数的四舍五入问题示例
Aug 03 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
Aug 29 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
Apr 13 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
Aug 25 Javascript
一种angular的方法级的缓存注解(装饰器)
Mar 13 Javascript
Vue slot用法(小结)
Oct 22 Javascript
详解vue 图片上传功能
Apr 30 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
Sep 23 Javascript
layer 关闭指定弹出层的例子
Sep 25 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
Mar 01 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一些公用函数的集合
2008/03/27 PHP
php错误级别的设置方法
2013/06/17 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
2014/05/12 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
JS实现图片横向滚动效果示例代码
2013/09/04 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
简述JS控制台的使用
2018/07/15 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
vue实现购物车的监听
2020/04/20 Javascript
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
Python的类实例属性访问规则探讨
2015/01/30 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
Pycharm更换python解释器的方法
2018/10/29 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
品质主管的岗位职责
2013/12/04 职场文书
竞争上岗演讲稿
2014/01/05 职场文书
商场消防管理制度
2014/01/12 职场文书
拉贝日记观后感
2015/06/05 职场文书
超强台风观后感
2015/06/09 职场文书
python如何在word中存储本地图片
2021/04/07 Python
IDEA 链接Mysql数据库并执行查询操作的完整代码
2021/05/20 MySQL
Python max函数中key的用法及原理解析
2021/06/26 Python