<html>
<head>
<title>js随机抽奖一二三等奖不重复的抽奖逻辑怎么设置</title>
<meta charset="UTF-8" />
<script>
//添加一个随机函数
Math.rand = function(min, max){
function subRand(min, max){
min = min ? min : 0
max = max ? max : 9
var result = 0
do{
result = Math.random().toString().substr(2, 1)
}while(!(result >= min && result <= max))
return result
}
function getBit(maxBit){
maxBit = maxBit ? maxBit : max.toString().length
var result = [],
count = 0
for(var i = 0 i < maxBit i++){
result.push(subRand())
if(i != 0 && result[i] == result[i - 1]){
count++
}
}
return maxBit - count
}
min = min ? min : 0
max = max ? max : 0
var result = '',
bit = getBit()
do{
result = ''
for(var i = 0 i < bit i++){
result = result + subRand()
}
result = parseInt(result)
}while(!(result >= min && result <= max))
return result
}
//console.log(Math.rand(0, 100))
//LuckDraw 抽奖类 参数一 奖池数组, 参数二 中奖数量 返回 中奖索引
function LuckDraw(pool, numberOfWinners){
var results = [],
//是否已经中奖
isExists = function(index){
for(var i = 0 i < results.length i++){
if(results[i] == index){
return true
}
}
return false
},
subLuckDraw = function(){
do{
result = Math.rand(0, pool.length - 1)
}while(isExists(result))
return result
}
for(var i = 0 i < numberOfWinners i++){
results.push(subLuckDraw())
}
return results
}
var pool = [
'关',
'张',
'赵',
'马',
'黄',
'曹老板'
]
winners = LuckDraw(pool, 3) //返回从奖池中 中奖的索引,假设123等奖都只有一名的话各取一个即可
//假设123等奖 一等奖 1名, 二等奖 2名, 三等奖 3名, 只需要调用这个函数第二个参数设置为总和 6 即可
//然后从结果中第一个索引为一等奖 23 索引为二等奖 , 456索引为 三等奖
console.log(winners)
</script>
</head>
<body>
<script>
for(var i = 0 i < winners.length i++){
document.write(pool[winners[i]] + ' 恭喜你中了' + (i + 1) + '等奖<br />')
}
</script>
</body>
</html>
可以给你一个思路在php有一个随机函数rand(min,max),min和max分表是设定的随机范围,当然可以不给他们值,那么php会在0-rand_max之间随机取值,在某些平台下(例如 Windows)RAND_MAX 只有 32768。
你可以先定义一个数组,然后循环取出随机的值,保存到数组里面,这么多数据,相信重复的概率是很小了。然后在取出的时候,先获取数组的长度,然后以0为min,数组长度-1为max进行随机获取数据,打印出数组中下标元素为该数的数据,这就是你想要的了。
JS中同上,不过JS随机是用Math.random(),它只会随机0-1之间的数据,所以你要获取多的,最好在后面*10000等你想要的数据,EG:Manth.random()*1000000,其它的原理同PHP
如果需要知道详细代码,请追问,谢谢。
建议自己先试试!
var string = "aaa,bbb,cc,ded,fff,ggg" //原始数据var array = string.split(",") //转化为数组
var value = array[Math.round(Math.random()*(array.length-1))] //随机抽取一个值
alert(value)