基本思路:把Math.random()js随机数生成的数看着百分比,然后定义每个整数值取值范围。

具体内容如下,供大家参考

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
'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);
}

最新文章

  1. 转战网站后台与python
  2. 转载:jQuery实现返回顶部功能
  3. 防止SQL注入问题
  4. cocos2d-x读取xml(适用于cocos2d-x 2.0以上版本号)
  5. ZOJ 1530 - Find The Multiple
  6. XX秘籍
  7. mac 上面安装mysql-python
  8. Git本地项目上传 &amp; SourceTree &amp; GitHub 简单使用
  9. Ionic2开发笔记(2)创建子页面及其应用
  10. tensorflow-Inception-v3模型训练自己的数据代码示例
  11. Linux命令:dirs
  12. Lodop打印设计矩形重合预览线条变粗
  13. http错误代码提示
  14. 【Python31--pickle函数】
  15. Mahout实战---运行第一个推荐引擎
  16. Django控制器
  17. 新一代数据库TiDB在美团的实践
  18. Python len() 方法
  19. 最近用.NET实现DHT爬虫,全.NET实现
  20. (转)Java GC基本算法

热门文章

  1. Java语言中的面向对象特性
  2. FFmpeg 学习(三):将 FFmpeg 移植到 Android平台
  3. 小程序上传wx.uploadFile - 小程序请假
  4. 一、activiti工作流(workflow)入门介绍
  5. 用 VSCode 编写 python
  6. 远程桌面连接:出现身份验证错误,要求的函数不受支持,可能是由于CredSSP加密Oracle修正的解决方法
  7. 部署 HTTPS 访问 ( https:// )
  8. web前端异步数据交互(长连接)
  9. [原创]K8mysqlCmd数据库免驱连接工具
  10. java提高(6)---Serializable