基于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 相关文章推荐
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
Feb 03 Javascript
node.js中的events.EventEmitter.listenerCount方法使用说明
Dec 08 Javascript
JavaScript+CSS无限极分类效果完整实现方法
Dec 22 Javascript
Javascript实现苹果悬浮虚拟按钮
Apr 10 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
Jun 12 Javascript
Bootstrap选项卡与Masonry插件的完美结合
Jul 06 Javascript
Bootstrap轮播插件使用代码
Oct 11 Javascript
微信小程序 开发之全局配置
May 05 Javascript
基于vue通用表单解决方案的思考与分析
Mar 16 Javascript
vue中利用Promise封装jsonp并调取数据
Jun 18 Javascript
JS Math对象与Math方法实例小结
Jul 05 Javascript
vue element-ui中table合计指定列求和实例
Nov 02 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
thinkphp3.2.2实现生成多张缩略图的方法
2014/12/19 PHP
php中ob函数缓冲机制深入理解
2015/08/03 PHP
php微信公众号开发之简答题
2018/10/20 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
jQuery formValidator表单验证插件开源了 含API帮助、源码、示例
2008/08/14 Javascript
JavaScript 题型问答有答案参考
2010/02/17 Javascript
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
使用Vue动态生成form表单的实例代码
2018/04/26 Javascript
用npm-run实现自动化任务的方法示例
2019/01/14 Javascript
python使用socket连接远程服务器的方法
2015/04/29 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
解决python调用自己文件函数/执行函数找不到包问题
2020/06/01 Python
什么是Python变量作用域
2020/06/03 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
检察官就职演讲稿
2014/01/13 职场文书
分公司负责人任命书
2014/06/04 职场文书
校园元旦活动总结
2014/07/09 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
观后感格式
2015/06/19 职场文书
工程进度款催款函
2015/06/24 职场文书
幼儿园心得体会范文
2016/01/21 职场文书
创业计划书之面包店
2019/09/12 职场文书
python可视化之颜色映射详解
2021/09/15 Python
Python+Tkinter打造签名设计工具
2022/04/01 Python
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android