js 控制随机数生成概率
基本思路:把Math.random()生成的数看着百分比,然后定义每个整数值取值范围。
'use strict'; 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 (0 < i && i < 1) 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;
}
} export default GL;
//module.exports = GL;
// 引用gl
import GL from './src/index.js';
//const GL = require('./src'); // 随机生成 1 ~ 8 之间的数(不包含8)
let gl = new GL({
min: 1,
max: 8,
fenpei: new Map([
[1, 0.1], // 1 生成概率为 10%
[2, 0.5], // 2 生成概率为 50%
[5, 0.2], // 5 生成概率为 20%
])
}); {
// 循环10000次看下概率分配情况
let map = {};
for (let i = 0; i < 10000; i++) {
let num = gl.random();
typeof map[num] !=='undefined' ? map[num] += 1 : map[num] = 0 ;
} for (let key in map) {
console.log(`${key} = ${map[key] / 10000}`);
}
}
百度网盘:
链接:https://pan.baidu.com/s/1Q8Ww3siWq9xHQ5KPPz_azQ
提取码:oyzr
复制这段内容后打开百度网盘手机App,操作更方便哦
js 控制随机数生成概率的更多相关文章
- js控制随机数生成概率代码实例
基本思路:把Math.random()js随机数生成的数看着百分比,然后定义每个整数值取值范围. 具体内容如下,供大家参考 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- Js 控制随机数概率
如: 取 1~10 之间的随机数,那么他们的取值范围是: 整数 区间 概率 1 [0,1) 0.1 2 [1,2) 0.1 3 [2,3) 0.1 4 [3,4) 0.1 5 [4,5) 0.1 6 ...
- SlimerJS – Web开发人员可编写 JS 控制的浏览器
SlimerJS 是一个提供给 Web 开发人员,可通过脚本编程控制的浏览器.它可以让你使用 Javascript 脚本操纵一个网页:打开一个网页,点击链接,修改的内容等,这对于做功能测试,页面自动机 ...
- js控制Bootstrap 模态框(Modal)插件
js控制Bootstrap 模态框(Modal)插件 http://www.cnblogs.com/zzjeny/p/5564400.html
- js控制文本框只能输入中文、英文、数字与指定特殊符号.
先在'' 里输入 onkeyup="value=value.replace(/[^\X]/g,'')" 然后在(/[\X]/g,'')里的 X换成你想输入的代码就可以了, 中文u4 ...
- JS控制flash的方法
JS控制flash的一些方法:Play() ---------------------------------------- 播放动画 StopPlay()---------------------- ...
- js 控制Div循环显示 非插件版
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JS常用正则表达式和JS控制输入框输入限制(数字、汉字、字符)
验证数字:^[0-9]*$验证n位的数字:^\d{n}$验证至少n位数字:^\d{n,}$验证m-n位的数字:^\d{m,n}$验证零和非零开头的数字:^(0|[1-9][0-9]*)$验证有两位小数 ...
- JS 控制CSS样式表
JS控制CSS所使用的方法: <style> .rule{ display: none; } </style> 你想要改变把他的display属性由none改为inline. ...
随机推荐
- 4K视频在线看,网速跟不上怎么办?
灿烂的阳光,温柔的风,二狗子一打开窗,觉得春天到了. “天气这么好,宅家玩电脑.”二狗子说着,点开了爱奇怪 App,最近一期的版本更新提到了支持 4K 视频播放,这是二狗子等了好久的功能. “今天我就 ...
- go语言调度器源代码情景分析之五:汇编指令
本文是<go调度器源代码情景分析>系列 第一章 预备知识的第4小节. 汇编语言是每位后端程序员都应该掌握的一门语言,因为学会了汇编语言,不管是对我们调试程序还是研究与理解计算机底层的一些运 ...
- 抽象工厂模式--java代码实现
抽象工厂模式 抽象工厂模式,对方法工厂模式进行抽象.世界各地都有自己的水果园,我们将这些水果园抽象为一个水果园接口,在中国.英国和美国都有水果园,种植不同的水果,比如苹果.香蕉和梨等.这里将苹果进行抽 ...
- .NET Core微服务系列基础文章索引(目录导航Final版)
一.为啥要总结和收集这个系列? 今年从原来的Team里面被抽出来加入了新的Team,开始做Java微服务的开发工作,接触了Spring Boot, Spring Cloud等技术栈,对微服务这种架构有 ...
- asp.net core系列 45 Web应用 模型绑定和验证
一. 模型绑定 ASP.NET Core MVC 中的模型绑定,是将 HTTP 请求中的数据映射到action方法参数. 这些参数可能是简单类型的参数,如字符串.整数或浮点数,也可能是复杂类型的参数. ...
- css实现发光文字,以及一点点js特效
效果图: 代码如下: </head> <style> body{ background-color:#000; } .textArea{ font-size:100px; co ...
- 前端笔记之CSS(下)浮动&BFC&定位&Hack
一.浮动 1.1 各个语言的主要知识点 HTML:标签语义化(那么怎么样布局才是合理的?没有绝对的对和错) CSS: 样式: 布局: 标准流(标准文档流.普通文档流):盒子模型(width/heigh ...
- Retrofit的初次使用
rxretrofitlibrary是一个已经写好的网络框架库,先以本地Module导入到自己的项目中. 1.它的初始化操作大多在自定义的application中完成,如: public class A ...
- Liunx-mv命令
mv要是不明白什么意思,你就把它想象成Windows里面剪切文件夹/文件,然后再去粘贴的操作,你就会明白的. 1. 移动一个文件夹(rightr文件夹,移动到/201904/a目录) 出现这个错误的原 ...
- Spring IOC源码实现流程
最近一段时间学习了IOC的源码实现,分享一下大概流程 创建一个测试类 代码如下: package com.zcg.learn.Test; import org.junit.Test;import or ...