基于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之通用简单的table选项卡实现(二)
May 09 Javascript
jquery如何把参数列严格转换成数组实现思路
Apr 01 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
Dec 09 Javascript
理解javascript封装
Feb 23 Javascript
javascript html实现网页版日历代码
Mar 08 Javascript
微信小程序 Video API实例详解
Oct 02 Javascript
浅谈javascript alert和confirm的美化
Dec 15 Javascript
纯JS实现简单的日历
Jun 26 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
Aug 16 Javascript
通过vue手动封装on、emit、off的代码详解
May 29 Javascript
在Echarts图中给坐标轴加一个标识线markLine
Jul 20 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
Nov 03 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
我的论坛源代码(五)
2006/10/09 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
Javascript实现字数统计
2015/07/03 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
JavaScript 实现的 zip 压缩和解压缩工具包Zip.js使用详解
2015/12/14 Javascript
jQuery四种选择器使用及示例
2016/06/05 Javascript
javascript弹出窗口中增加确定取消按钮
2016/06/24 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
vue路由--网站导航功能详解
2019/03/29 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
[02:14]DOTA2英雄基础教程 修补匠
2013/12/23 DOTA
Python中最大最小赋值小技巧(分享)
2017/12/23 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
python的re模块使用方法详解
2019/07/26 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
美国钻石商店:Zales
2016/11/20 全球购物
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
请假条怎么写
2014/04/10 职场文书
保护环境建议书100字
2014/05/13 职场文书
保护地球的标语
2014/06/17 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
捐款感谢信
2015/01/20 职场文书
2015年党员个人自我评价
2015/03/03 职场文书
中小学生安全教育观后感
2015/06/17 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang
python opencv旋转图片的使用方法
2021/06/04 Python