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 匿名函数的理解(透彻版)
Jan 28 Javascript
jQuery EasyUI API 中文文档 - Draggable 可拖拽
Sep 29 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
Jul 09 Javascript
JS 添加千分位与去掉千分位的示例
Jul 11 Javascript
jQuery及JS实现循环中暂停的方法
Feb 02 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
Jun 19 Javascript
javascript中使用正则表达式清理table样式的代码
Apr 01 Javascript
微信小程序实现锚点定位楼层跳跃的实例
May 18 Javascript
Angular4学习之Angular CLI的安装与使用教程
Jan 04 Javascript
浅谈React中的元素、组件、实例和节点
Feb 27 Javascript
Node.js实现一个HTTP服务器的方法示例
May 13 Javascript
webpack3升级到webpack4遇到问题总结
Sep 30 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
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
Thinkphp实现MySQL读写分离操作示例
2014/06/25 PHP
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
jquery图形密码实现方法
2015/03/11 Javascript
Yii2使用Bootbox插件实现自定义弹窗
2015/04/02 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
JS实现简单表格排序操作示例
2017/10/07 Javascript
json字符串传到前台input的方法
2018/08/06 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
使用11行Python代码盗取了室友的U盘内容
2018/10/23 Python
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
Django数据库操作之save与update的使用
2020/04/01 Python
详解基于python的图像Gabor变换及特征提取
2020/10/26 Python
移动端html5模拟长按事件的实现方法
2018/09/30 HTML / CSS
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
String和StringBuffer的区别
2015/08/13 面试题
红领巾心向党广播稿
2014/01/19 职场文书
承诺书模板
2014/08/30 职场文书
表扬信范文
2015/05/04 职场文书
2016新年年会主持词
2015/07/06 职场文书
《我的长生果》教学反思
2016/02/20 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python