基于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入门知识简介
Mar 04 Javascript
jQuery基本过滤选择器使用介绍
Apr 18 Javascript
gridpanel动态加载数据的实例代码
Jul 18 Javascript
seaJs的模块定义和模块加载浅析
Jun 06 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
Mar 27 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
May 30 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
Jul 24 Javascript
使用JS实现气泡跟随鼠标移动的动画效果
Sep 16 Javascript
three.js实现炫酷的全景3D重力感应
Dec 30 Javascript
Electron 如何调用本地模块的方法
Feb 01 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
Jul 15 Javascript
vue 全局封装loading加载教程(全局监听)
Nov 05 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 如何向 MySQL 发送数据
2006/10/09 PHP
php 引用(&amp;)详解
2009/11/20 PHP
来自phpguru得Php Cache类源码
2010/04/15 PHP
PHP在线书签系统分享
2016/01/04 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
jQuery+ajax实现实用的点赞插件代码
2016/07/06 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
微信小程序(六):列表上拉加载下拉刷新示例
2017/01/13 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
Async Validator 异步验证使用说明
2017/07/03 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
Python中py文件转换成exe可执行文件的方法
2019/06/14 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
Python生成词云的实现代码
2020/01/14 Python
在keras 中获取张量 tensor 的维度大小实例
2020/06/10 Python
python操作微信自动发消息的实现(微信聊天机器人)
2020/07/14 Python
使用OpenCV实现道路车辆计数的使用方法
2020/07/15 Python
Python使用内置函数setattr设置对象的属性值
2020/10/16 Python
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
Groupon法国官方网站:特卖和网上购物高达-70%
2019/09/02 全球购物
2014年公司庆元旦活动方案
2014/03/05 职场文书
环保建议书600字
2014/05/14 职场文书
教师党员个人整改措施材料
2014/09/16 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
2014年政工师工作总结
2014/12/18 职场文书
员工规章制度范本
2015/08/07 职场文书
Java并发编程必备之Future机制
2021/06/30 Java/Android