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 相关文章推荐
非html5实现js版弹球游戏示例代码
Sep 22 Javascript
JavaScript实现的使用键盘控制人物走动实例
Aug 27 Javascript
JavaScript 正则表达式中global模式的特性
Feb 25 Javascript
javascript html5轻松实现拖动功能
Mar 01 Javascript
全选复选框JavaScript编写小结(附代码)
Aug 16 Javascript
JS获取当前地理位置的方法
Oct 25 Javascript
vue 文件目录结构详解
Nov 24 Javascript
微信小程序实现签到功能
Oct 31 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
May 28 Javascript
JavaScript 继承 封装 多态实现及原理详解
Jul 29 Javascript
Vue实现回到顶部和底部动画效果
Jul 31 Javascript
小程序如何自主实现拦截器的示例代码
Nov 04 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绘图中显示不出图片的原因及解决
2014/03/05 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
摘自启点的main.js
2008/04/20 Javascript
JS 常用校验函数
2009/03/26 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
JavaScript实现求最大公共子串的方法
2018/02/03 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
你或许不知道的一些npm实用技巧
2019/07/04 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
python实现文件名批量替换和内容替换
2014/03/20 Python
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
实体的生命周期
2013/08/31 面试题
经典优秀个人求职自荐信格式
2013/09/25 职场文书
动员大会主持词
2014/03/20 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
2014年银行工作总结范文
2014/11/12 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL
python小型的音频操作库mp3Play
2022/04/24 Python
python实现简单的三子棋游戏
2022/04/28 Python
HTML静态页面获取url参数和UserAgent的实现
2022/08/05 HTML / CSS
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers