JavaScript

超轻量级php框架startmvc

js控制随机数生成概率代码实例

更新时间:2020-08-18 07:30 作者:startmvc
基本思路:把Math.random()生成的数看着百分比,然后定义每个整数值取值范围。具体内容如

基本思路:把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控制随机数生成概率代码实例详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!