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中的eval函数
Nov 02 Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
Mar 24 Javascript
nullJavascript中创建对象的五种方法实例
May 07 Javascript
Javascript中innerHTML用法实例分析
Jan 12 Javascript
JavaScript动态添加style节点的方法
Jun 09 Javascript
JavaScript面对国际化编程时的一些建议
Jun 24 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
Jan 01 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
Jun 07 Javascript
Angular中$cacheFactory的作用和用法实例详解
Aug 19 Javascript
jQuery日程管理插件fullcalendar使用详解
Jan 07 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
Nov 16 Javascript
如何使用less实现随机下雪动画详解
Jan 02 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数据库操作类代码(增,删,改,查)
2013/04/08 PHP
几个实用的PHP内置函数使用指南
2014/11/27 PHP
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
jQuery实现自定义事件的方法
2015/04/17 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
浅析Bootstrap验证控件的使用
2016/06/23 Javascript
详解AngularJs中$resource和restfu服务端数据交互
2016/09/21 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
一个因@click.stop引发的bug的解决
2019/01/08 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
React生命周期原理与用法踩坑笔记
2020/04/28 Javascript
openlayers4.6.5实现距离量测和面积量测
2020/09/25 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
2020/12/30 Vue.js
[50:28]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs KG
2018/04/01 DOTA
用Python写一个无界面的2048小游戏
2016/05/24 Python
Python切片操作深入详解
2018/07/27 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
英国创新设计文具、卡片和礼品包装网站:Paperchase
2018/07/14 全球购物
牵手50香港:专为黄金岁月的单身人士而设的交友网站
2020/08/14 全球购物
研修第一天随笔感言
2014/02/15 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
反腐倡廉警示教育活动心得体会
2014/09/04 职场文书
学校食品安全责任书
2015/01/29 职场文书
继续教育个人总结
2015/03/03 职场文书
2016新党章学习心得体会
2016/01/15 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技