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 相关文章推荐
基于jQuery的简单的列表导航菜单
Mar 02 Javascript
动态加载JS文件的三种方法
Nov 08 Javascript
jquery(hide方法)隐藏指定元素实例
Nov 11 Javascript
jquery form 隐藏的input 选择
Apr 29 Javascript
JQuery显示、隐藏div的几种方法简明总结
Apr 16 Javascript
JavaScript 中对象的深拷贝
Dec 04 Javascript
js实现常见的工具条效果
Mar 02 Javascript
JavaScript函数节流的两种写法
Apr 07 Javascript
详解vue.js之绑定class和style的示例代码
Aug 24 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
Apr 25 Javascript
vue获取验证码倒计时组件
Aug 26 Javascript
JS数组Reduce方法功能与用法实例详解
Apr 29 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
header导出Excel应用示例
2014/01/24 PHP
php中session使用示例
2014/03/29 PHP
php+MySQL判断update语句是否执行成功的方法
2014/08/28 PHP
php+mysql结合Ajax实现点赞功能完整实例
2015/01/30 PHP
php创建无限级树型菜单
2015/11/05 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
JQuery1.6 使用方法三
2011/11/23 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
浅析Python多线程下的变量问题
2015/04/28 Python
Django框架下在视图中使用模版的方法
2015/07/16 Python
python批量制作雷达图的实现方法
2016/07/26 Python
正确理解python中的关键字“with”与上下文管理器
2017/04/21 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
会计电算化专业应届大学生求职信
2013/10/22 职场文书
年检委托书
2014/08/30 职场文书
合同和协议有什么区别?
2014/10/08 职场文书
2015年机关纠风工作总结
2015/05/15 职场文书
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL