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 SetInterval与setTimeout使用方法详解
Nov 15 Javascript
jquery live()重复绑定的解决方法介绍
Jan 03 Javascript
js设置文本框中焦点位置在最后的示例代码(简单实用)
Mar 04 Javascript
调试代码导致IE出错的避免方法
Apr 04 Javascript
jQuery中data()方法用法实例
Dec 27 Javascript
javascript实现类似java中getClass()得到对象类名的方法
Jul 27 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
Jan 08 Javascript
js获取腾讯视频ID的方法
Oct 03 Javascript
浅谈angular4实际项目搭建总结
Dec 01 Javascript
学习使用ExpressJS 4.0中的新Router的用法
Nov 06 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
Dec 20 Javascript
JavaScript实现单图片上传并预览功能
Sep 30 Javascript
详解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
德生S2000电路分析
2021/03/02 无线电
php 静态化实现代码
2009/03/20 PHP
PHP 获取远程文件内容的函数代码
2010/03/24 PHP
php连接mssql的一些相关经验及注意事项
2013/02/05 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
强大Vue.js组件浅析
2016/09/12 Javascript
angular ng-repeat数组中的数组实例
2017/02/18 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
Angular7.2.7路由使用初体验
2019/03/01 Javascript
[08:54]《一刀刀一天》之DOTA全时刻18:十九支奔赴西雅图队伍全部出炉
2014/06/04 DOTA
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
Python实现登录接口的示例代码
2017/07/21 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
python库matplotlib绘制坐标图
2019/10/18 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
网络安全类面试题
2015/08/01 面试题
法律进社区实施方案
2014/03/21 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
Redis 哨兵机制及配置实现
2022/03/25 Redis