基于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 相关文章推荐
JS实现的省份级联实例代码
Jun 24 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
Mar 04 Javascript
jQuery简单操作cookie的插件实例
Jan 13 Javascript
限制复选框最多选择项的实现代码
May 30 Javascript
详解js中的apply与call的用法
Jul 30 Javascript
关于javascript作用域的常见面试题分享
Jun 18 Javascript
全面介绍vue 全家桶和项目实例
Dec 27 Javascript
javascript数组拍平方法总结
Jan 20 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
Apr 27 jQuery
JS基于ES6新特性async await进行异步处理操作示例
Feb 02 Javascript
原生js实现下拉选项卡
Nov 27 Javascript
react实现复选框全选和反选组件效果
Aug 25 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
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
解析PHP实现下载文件的两种方法
2013/07/05 PHP
php获取qq用户昵称和在线状态(实例分析)
2013/10/27 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
PDO::query讲解
2019/01/29 PHP
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
Javascript拓展String方法小结
2013/07/08 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
bootstrap模态框消失问题的解决方法
2016/12/02 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
2017/07/12 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
JS Html转义和反转义(html编码和解码)的实现与使用方法总结
2020/03/10 Javascript
Python中每次处理一个字符的5种方法
2015/05/21 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
mac使用python识别图形验证码功能
2020/01/10 Python
为什么是 Python -m
2020/06/19 Python
css3教程之倾斜页面
2014/01/27 HTML / CSS
巴黎卡诗加拿大官网:Kérastase加拿大
2018/11/12 全球购物
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
小学生家长寄语
2014/04/02 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
自习课吵闹检讨书范文
2014/09/26 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
销售内勤岗位职责
2015/02/10 职场文书
公司新员工欢迎词
2015/09/30 职场文书
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis
特别篇动画《总之就是非常可爱 ~制服~》PV公开,2022年夏季播出
2022/04/04 日漫
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL