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 相关文章推荐
ASP小贴士/ASP Tips javascript tips可以当桌面
Dec 10 Javascript
js使用post 方式打开新窗口
Feb 26 Javascript
javascript获取系统当前时间的方法
Nov 19 Javascript
简介BootStrap model弹出框的使用
Apr 27 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
Jan 01 Javascript
基于DOM节点删除之empty和remove的区别(详解)
Sep 11 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
Jun 25 Javascript
详解小程序循环require之坑
Mar 08 Javascript
WebSocket的简单介绍及应用
May 23 Javascript
VUE组件中的 Drawer 抽屉实现代码
Aug 06 Javascript
JavaScript实现模态对话框实例
Jan 13 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
Apr 10 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
杏林同学录(四)
2006/10/09 PHP
php的access操作类
2008/04/09 PHP
php7 新增功能实例总结
2020/05/25 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
用户注册常用javascript代码
2009/08/29 Javascript
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
javascript iframe编程相关代码
2009/12/28 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
javascript 禁用IE工具栏,导航栏等等实现代码
2013/04/01 Javascript
中文路径导致unitpngfix.js不正常的解决方法
2013/06/26 Javascript
jquery序列化表单以及回调函数的使用示例
2014/07/02 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
JavaScript屏蔽Backspace键的实现代码
2017/11/02 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
微信小程序页面上下滚动效果
2020/11/18 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
python实现用户登录系统
2016/05/21 Python
python实现下载整个ftp目录的方法
2017/01/17 Python
Python程序退出方式小结
2017/12/09 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
2020/06/11 Python
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
运动会解说词100字
2014/01/31 职场文书
优秀学生干部推荐材料
2014/02/03 职场文书
专家推荐信模板
2014/05/09 职场文书
教师党员个人整改措施材料
2014/09/16 职场文书
红领巾广播站广播稿
2014/10/19 职场文书
法制教育主题班会
2015/08/13 职场文书