基于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 相关文章推荐
jquery 框架使用教程 AJAX篇
Oct 11 Javascript
javascript 日期时间 转换的方法
Feb 21 Javascript
js的onload事件及初始化按钮事件示例代码
Sep 25 Javascript
js进行表单验证实例分析
Feb 10 Javascript
jQuery实现MSN中文网滑动Tab菜单效果代码
Sep 09 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
Jan 13 Javascript
JavaScript与jQuery实现的闪烁输入效果
Feb 18 Javascript
原生Javascript插件开发实践
Jan 09 Javascript
jQuery Ajax实现跨域请求
Jan 21 Javascript
js调用刷新界面的几种方式
May 03 Javascript
laravel5.4+vue+element简单搭建的示例代码
Aug 29 Javascript
基于js中的原型(全面讲解)
Sep 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
smarty section简介与用法分析
2008/10/03 PHP
php中计算程序运行时间的类代码
2012/11/03 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
PHP 字符串长度判断效率更高的方法
2014/03/02 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
javascript 动态创建表格的2种方法总结
2015/03/04 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
JavaScript实现的SHA-1加密算法完整实例
2016/02/02 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
js实现登录验证码
2016/12/22 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
javascript实现的图片预览功能
2017/03/25 Javascript
JS实现的集合去重,交集,并集,差集功能示例
2018/03/13 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
python读写二进制文件的方法
2015/05/09 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
Python编程实现从字典中提取子集的方法分析
2018/02/09 Python
python 哈希表实现简单python字典代码实例
2019/09/27 Python
Python如何基于rsa模块实现非对称加密与解密
2020/01/03 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
python如何支持并发方法详解
2020/07/25 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
营销与策划个人求职信
2013/09/22 职场文书
夜大毕业生自我评价分享
2013/11/10 职场文书
大学生活动总结模板
2014/07/02 职场文书
简单介绍 http请求响应参数、无连接无状态、MIME、状态码、端口、telnet、curl
2021/03/31 HTML / CSS
7个你应该知道的JS原生错误类型
2021/04/29 Javascript
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL