js控制随机数生成概率代码实例


Posted in Javascript onMarch 21, 2019

基本思路:把Math.random()生成的数看着百分比,然后定义每个整数值取值范围。

具体内容如下,供大家参考

'use strict';
export default class GL {
  /**
   * 构造函数
   * @param {object} opt
   * @param {number} opt.min 最小整数值
   * @param {number} opt.max 最大整数值
   * @param {Map} opt.fenpei 自定义概率 
   */
  constructor({ min, max, fenpei = new Map() }) {
    this.min = min;
    this.max = max;
    this.fenpei = fenpei;
  }

  /**
   * 可分配百分比
   */
  get baifenbi() {
    return (1 - this.peizhi) / (this.max - this.min - this.fenpei.size);
  }

  /**
   * 配置
   */
  get peizhi() {
    let result = 0;
    for (let i of this.fenpei.values()) {
      if (this.min <= i && i < this.max) result += i;
    }
    return result;
  }


  /**
   * 随机数
   * @returns {number} [min,max)
   */
  random() {
    let t = 0, r = Math.random();
    for (let i = this.min; i < this.max; i++) {
      this.fenpei.has(i) ? t += this.fenpei.get(i) : t += this.baifenbi;
      if (t > r) return i;
    }
    return null;
  }
}


let d = new GL({
  min: 0,
  max: 8,
  fenpei: new Map([
    [0, 0.5], // 数值,百分比
    [22, 0.4]
  ])
});

// 测试
let count = Array(10).fill(0);
for (let i = 0; i < 10000; i++) {
  count[d.random()] += 1;

}

for (let i = 0; i < count.length; i++) {
  console.log(count[i] / 10000);
}

以上所述是小编给大家介绍的js控制随机数生成概率代码实例详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
菜鸟javascript基础整理1
Dec 06 Javascript
JQUERY的属性选择符和自定义选择符使用方法(二)
Apr 07 Javascript
js实现数字每三位加逗号的方法
Feb 05 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
Aug 18 Javascript
AngularJS国际化详解及示例代码
Aug 18 Javascript
js基本算法:冒泡排序,二分查找的简单实例
Oct 08 Javascript
React如何利用相对于根目录进行引用组件详解
Oct 09 Javascript
vue 中的keep-alive实例代码
Jul 20 Javascript
解决vue中修改了数据但视图无法更新的情况
Aug 27 Javascript
Vue作用域插槽slot-scope实例代码
Sep 05 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
Oct 29 Javascript
IE8中jQuery.load()加载页面不显示的原因
Nov 15 jQuery
详解bootstrap-fileinput文件上传控件的亲身实践
Mar 21 #Javascript
详解基于React.js和Node.js的SSR实现方案
Mar 21 #Javascript
javascript中call()、apply()的区别
Mar 21 #Javascript
vue实现微信获取用户信息的方法
Mar 21 #Javascript
vue里如何主动销毁keep-alive缓存的组件
Mar 21 #Javascript
基于node简单实现RSA加解密的方法步骤
Mar 21 #Javascript
详解React项目如何修改打包地址(编译输出文件地址)
Mar 21 #Javascript
You might like
PHP实现动态web服务器方法
2015/07/29 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
JS动画效果代码3
2008/04/03 Javascript
基于JQuery的cookie插件
2010/04/07 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
jQuery实现简单隔行变色的方法
2016/02/20 Javascript
nodejs 搭建简易服务器的图文教程(推荐)
2017/07/18 NodeJs
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
详解React路由传参方法汇总记录
2020/11/29 Javascript
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
Python遍历指定文件及文件夹的方法
2015/05/09 Python
python自定义解析简单xml格式文件的方法
2015/05/11 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
用Python写一个无界面的2048小游戏
2016/05/24 Python
Python网络编程详解
2017/10/31 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
农贸市场管理制度
2014/01/31 职场文书
复试通知单模板
2015/04/24 职场文书
法人代表证明书范本
2015/06/18 职场文书
高中团支书竞选稿
2015/11/21 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers