corgi/src/utils/number.util.ts
2021-06-07 16:32:37 +08:00

35 lines
818 B
TypeScript

/**
* 随机数
* @param {number} max
* @param {number} min
* @return {number}
*/
export function getRandom(max: number, min?: number): number {
min = min || 0
return Math.floor(Math.random() * (max - min) + min)
}
/**
* 根据概率数组获取随机index
* @since 1.0.0
* @param prob_array 概率数组
*/
export function random_prob(prob_array: number[]): number {
let total = 0
for (let _d of prob_array) {
total += _d
}
prob_array = prob_array.map(o => o / total)
// 获取随机数
let r = Math.random()
// 对概率数组的处理
let s = prob_array
.map((v, index) => {
return { index: index, prob: v }
})
.sort((a, b) => a.prob - b.prob)
// 判断随机位置
let result = s.find(v => (r -= v.prob) <= 0)
return result ? result.index : s.length - 1
}