35 lines
818 B
TypeScript
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
|
|
}
|