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 相关文章推荐
Add Formatted Text to a Word Document
Jun 15 Javascript
javascript事件问题
Sep 05 Javascript
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
Apr 24 Javascript
深入理解JavaScript作用域和作用域链
Oct 21 Javascript
用按钮控制iframe显示的网页实现方法
Feb 04 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
Jan 15 Javascript
详解js实现线段交点的三种算法
Aug 09 Javascript
jquery鼠标悬停导航下划线滑出效果
Sep 29 jQuery
浅谈vue生命周期共有几个阶段?分别是什么?
Aug 07 Javascript
JS实现斐波那契数列的五种方式(小结)
Sep 09 Javascript
vue实现防抖的实例代码
Jan 11 Vue.js
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 Vue.js
详解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 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
让PHP开发者事半功倍的十大技巧小结
2010/04/20 PHP
PHP连接Access数据库的方法小结
2013/06/20 PHP
PHP中isset与array_key_exists的区别实例分析
2015/06/02 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
安装docker和docker-compose实例详解
2019/07/30 PHP
window.location.hash 使用说明
2010/11/08 Javascript
JS HTML5 音乐天气播放器(Ajax获取天气信息)
2013/05/26 Javascript
iframe实用操作锦集
2014/04/22 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
jQuery基础语法实例入门
2014/12/23 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
浅谈js和css内联外联注意事项
2016/06/30 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
2019/08/05 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
在cmder下安装ipython以及环境的搭建
2018/10/19 Python
python中的tcp示例详解
2018/12/09 Python
python ---lambda匿名函数介绍
2019/03/13 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
使用CSS3来匹配横屏竖屏的简单方法
2015/08/04 HTML / CSS
使用html5+css3来实现slider切换效果告别javascript+css
2013/01/08 HTML / CSS
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
见习期自我鉴定
2013/11/07 职场文书
简短证婚人证婚词
2014/01/09 职场文书
活动总结怎么写
2014/04/28 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书
给领导敬酒词
2015/08/12 职场文书
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL
vue @ ~ 相对路径 路径别名设置方式
2022/06/05 Vue.js