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 应用类库代码
Jun 02 Javascript
Prototype ObjectRange对象学习
Jul 19 Javascript
javascript Event对象详解及使用示例
Nov 22 Javascript
动态的绑定事件addEventListener方法的使用
Jan 24 Javascript
javascript模拟枚举的简单实例
Mar 06 Javascript
js清空表单数据的两种方式(遍历+reset)
Jul 18 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
Aug 21 Javascript
easyui combobox开启搜索自动完成功能的实例代码
Nov 08 Javascript
Angular.js自定义指令学习笔记实例
Feb 24 Javascript
Bootstrap警告(Alerts)的实现方法
Mar 22 Javascript
JavaScript数组的5种迭代方法
Sep 29 Javascript
webpack打包html里面img后src为“[object Module]”问题
Dec 22 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
php curl登陆qq后获取用户信息时证书错误
2015/02/03 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
php函数连续调用实例分析
2015/07/30 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
简单实用的反馈表单无刷新提交带验证
2013/11/15 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
拖动时防止选中
2017/02/03 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
Node学习记录之cluster模块
2017/05/31 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
vue如何判断dom的class
2018/04/26 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
python selenium操作cookie的实现
2020/03/18 Python
基于python图像处理API的使用示例
2020/04/03 Python
Python如何创建装饰器时保留函数元信息
2020/08/07 Python
英国口碑最好的的维他命胶囊品牌:Myvitamins(有中文站)
2016/12/03 全球购物
Unineed中文官网:高端护肤美妆与时尚配饰,英国直邮
2020/07/23 全球购物
实用求职信范文分享
2013/12/25 职场文书
高一化学教学反思
2014/02/05 职场文书
房屋出租协议书
2014/04/10 职场文书
见习报告的格式
2014/11/04 职场文书
领导干部考核评语
2015/01/04 职场文书
2015年教师节演讲稿范文
2015/03/19 职场文书
校运会宣传稿大全
2015/07/23 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
使用MybatisPlus打印sql语句
2022/04/22 SQL Server