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 相关文章推荐
从新浪弄下来的全屏广告代码 与使用说明
Mar 15 Javascript
javascript解决innerText浏览器兼容问题思路代码
May 17 Javascript
给事件响应函数传参数的四种方式小结
Dec 05 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
Feb 22 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
Jan 08 Javascript
JavaScript实现打开链接页面的方式汇总
Jun 02 Javascript
jQuery插件uploadify实现ajax效果的图片上传
Jun 18 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
Jul 01 Javascript
JavaScript中值类型和引用类型的区别
Feb 23 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
Mar 01 Javascript
Node.js实现批量下载图片简单操作示例
Jan 18 Javascript
前端 javascript 实现文件下载的示例
Nov 24 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
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
PHP实现webshell扫描文件木马的方法
2017/07/31 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
2011/07/12 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
jquery.validate使用详解
2016/06/02 Javascript
js 自带的sort() 方法全面了解
2016/08/16 Javascript
Nodejs搭建wss服务器教程
2017/05/24 NodeJs
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
深入理解Vue Computed计算属性原理
2018/05/29 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
2018/11/14 jQuery
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
python使用Pycharm创建一个Django项目
2018/03/05 Python
10分钟教你用Python实现微信自动回复功能
2018/11/28 Python
python内存动态分配过程详解
2019/07/15 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
学校后勤人员职责
2013/12/27 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
优秀教师申报材料
2014/12/16 职场文书
2015年学校食堂工作总结
2015/04/22 职场文书
财务年终工作总结大全
2019/06/20 职场文书
Python移位密码、仿射变换解密实例代码
2021/06/27 Python
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript