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_14_函数形式参数与arguments
Oct 20 Javascript
JS自动缩小超出大小的图片
Oct 12 Javascript
js实现两个值相加alert出来精确到指定位
Sep 25 Javascript
javascript结合ajax读取txt文件内容
Dec 05 Javascript
jquery实现简单文字提示效果
Dec 02 Javascript
jquery操作select元素和option的实例代码
Feb 03 Javascript
解决vue打包项目后刷新404的问题
Mar 06 Javascript
vuex state及mapState的基础用法详解
Apr 19 Javascript
vue实现多级菜单效果
Oct 19 Javascript
JavaScript中的类型检查
Feb 03 Javascript
Vue vm.$attrs使用场景详解
Mar 08 Javascript
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 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获取网络上文件
2006/10/09 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
php遍历解析xml字符串的方法
2016/05/05 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
PHP实现验证码校验功能
2017/11/16 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
javascript实现yield的方法
2013/11/06 Javascript
使用原生js写的一个简单slider
2014/04/29 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
实例讲解避免javascript冲突的方法
2016/01/03 Javascript
JavaScript生成带有缩进的表格代码
2016/06/15 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
python魔法方法-自定义序列详解
2016/07/21 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
python 通过视频url获取视频的宽高方式
2019/12/10 Python
Python读取csv文件实例解析
2019/12/30 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
python time()的实例用法
2020/11/03 Python
澳大利亚领先的折扣药房:Chemist Direct(有中文站)
2018/11/24 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
书法兴趣小组活动总结
2014/07/07 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
新闻人物通讯稿
2014/10/09 职场文书
小学公民道德宣传日活动总结
2015/03/23 职场文书
高中体育课教学反思
2016/02/16 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android
python和anaconda的区别
2022/05/06 Python