如何随机获取带概率的随机数?类似抽奖业务
需求是这样的:又一个16个元素的数组,元素为10个蓝色,3个紫色,2个红色,1个金色,现在要求点击按钮从数组中随机抽一个颜色,同时要求,每个颜色的概率可以配置。
其实就是类似业务中的抽奖,看似10个奖品,其中一个是大奖,那为什么大奖的概率不是十分之一呢?
let blueOdds = 0.4 // 蓝色概率
let purpleOdds = 0.3 // 紫色概率
let redOdds = 0.2 // 红色概率
let goldOdds = 0.1 // 金色概率
let arr = ['蓝色','蓝色','蓝色','蓝色','蓝色','蓝色','蓝色','蓝色','蓝色','蓝色','紫色','紫色','紫色','红色','红色','金色']// 定义一个根据概率从数组中随机选出一个颜色的函数
function pickRandomColor(arr) {// 定义一个变量,存储随机数let random = Math.random()// 定义一个变量,存储选中的元素的下标let index// 根据概率判断选中哪个颜色if (random < blueOdds) {// 如果随机数小于0.4,选中蓝色// 在数组中找到所有蓝色的下标let blueIndices = []for (let i = 0; i < arr.length; i++) {if (arr[i].levelColor == '蓝色') {blueIndices.push(i)}}// 在蓝色的下标中随机选一个index = blueIndices[Math.floor(Math.random() * blueIndices.length)]} else if (random < blueOdds + purpleOdds) {// 如果随机数在0.4到0.7之间,选中紫色// 在数组中找到所有紫色的下标let purpleIndices = []for (let i = 0; i < arr.length; i++) {if (arr[i].levelColor == '紫色') {purpleIndices.push(i)}}// 在紫色的下标中随机选一个index = purpleIndices[Math.floor(Math.random() * purpleIndices.length)]} else if (random < blueOdds + purpleOdds + redOdds) {// 如果随机数在0.7到0.9之间,选中红色// 在数组中找到所有红色的下标let redIndices = []for (let i = 0; i < arr.length; i++) {if (arr[i].levelColor == '红色') {redIndices.push(i)}}// 在红色的下标中随机选一个index = redIndices[Math.floor(Math.random() * redIndices.length)]} else {// 如果随机数大于等于0.9,选中金色// 在数组中找到所有黄色的下标let yellowIndices = []for (let i = 0; i < arr.length; i++) {if (arr[i].levelColor == '金色') {yellowIndices.push(i)}}// 在黄色的下标中随机选一个index = yellowIndices[Math.floor(Math.random() * yellowIndices.length)]}return index
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
