基于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同时按下两个方向键
Dec 01 Javascript
Dom加载让图片加载完再执行的脚本代码
May 15 Javascript
Jquery 选中表格一列并对表格排序实现原理
Dec 15 Javascript
JS实现随机化快速排序的实例代码
Aug 01 Javascript
node.js中的url.parse方法使用说明
Dec 10 Javascript
JQuery删除DOM节点的方法
Jun 11 Javascript
省市选择的简单实现(基于zepto.js)
Jun 21 Javascript
深入理解jquery中extend的实现
Dec 22 Javascript
利用babel将es6语法转es5的简单示例
Dec 01 Javascript
详解tween.js 中文使用指南
Jan 05 Javascript
vue注册组件的几种方式总结
Mar 08 Javascript
Node.js web 应用如何封装到Docker容器中
Sep 01 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 验证码实例代码
2010/06/01 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
php显示指定目录下子目录的方法
2015/03/20 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
2017/08/11 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
高性能JavaScript 重排与重绘(2)
2015/08/11 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
2017/11/03 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
[01:13:18]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
wxpython 最小化到托盘与欢迎图片的实现方法
2014/06/09 Python
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
Python内置类型性能分析过程实例
2020/01/29 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
Trip.com澳大利亚:在线旅行社
2019/12/01 全球购物
PHP高级工程师面试问题推荐
2013/01/18 面试题
承认错误的检讨书
2014/01/30 职场文书
教师优秀党员事迹材料
2014/08/14 职场文书
城市规划应届生推荐信
2014/09/08 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
导游词之千岛湖
2019/09/23 职场文书
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL