目前代码可以实现随机产生数字,我想加一个数组用来保存抽中的号码 下次产生随机数的时候检查数组中是否存在 不存在才能显示在页面,js代码如下:
var g_Interval = 1;
var g_PersonCount = 150;//参加抽奖人数
var g_Timer;
var running = false;
var ary= [];//声明空数组用来保存抽中的号码
var num;
function beginRndNum(trigger){
if(running){
running = false;
clearTimeout(g_Timer);
$(trigger).val("开始");
$('#ResultNum').css('color','red');
updateRndNum()
console.log(ary);
}
else{
running = true;
$('#ResultNum').css('color','black');
$(trigger).val("停止");
beginTimer();
}
}
function updateRndNum(){
var num = Math.floor(Math.random()*g_PersonCount+1);//随机生成一个数
ary.push(num);
$('#ResultNum').html(num);
}
function beginTimer(){
g_Timer = setTimeout(beat, g_Interval);
}
function beat() {
g_Timer = setTimeout(beat, g_Interval);
updateRndNum();
}
find、 indexOf方法都可以实现 建议去看一下,只用别人的代码,不懂其中的意思没什么用下次还是要查,加油
var g_Interval = 1; var g_PersonCount = 150;//参加抽奖人数 var g_Timer; var running = false; var ary= [];//声明空数组用来保存抽中的号码 var num; function beginRndNum(trigger){ if(running){ running = false; clearTimeout(g_Timer); $(trigger).val("开始"); $('#ResultNum').css('color','red'); updateRndNumV3() console.log(ary); } else{ running = true; $('#ResultNum').css('color','black'); $(trigger).val("停止"); beginTimer(); } } function updateRndNumV3(){ var flag = 1 while(flag==1){ var num = Math.floor(Math.random()*g_PersonCount+1);//随机生成一个数 flag=arr.indexOf(num); } ary.push(num); $('#ResultNum').html(num); } function updateRndNum(){ var num = Math.floor(Math.random()*g_PersonCount+1);//随机生成一个数 $('#ResultNum').html(num); } function beginTimer(){ g_Timer = setTimeout(beat, g_Interval); } function beat() { g_Timer = setTimeout(beat, g_Interval); updateRndNum(); }
请输入代码
像这种其实最好给后端做,前端负责显示就好了。
你每次生成数字后,检测数字是否包含在ary里,若包含,就再次随机生成,不包含,就把数字push进ary里。
最简单的检测就是循环数组比较。
function beginRndNum(trigger){ if(running){ running = false; clearTimeout(g_Timer); $(trigger).val("开始"); $('#ResultNum').css('color','red'); updateRndNum() // 你这里就改成luckNumber() console.log(ary); } else{ running = true; $('#ResultNum').css('color','black'); $(trigger).val("停止"); beginTimer(); } }
function luckNumber(){ while(1) { var num = Math.floor(Math.random()*g_PersonCount+1);//随机生成一个数 if (ary.indexOf(num) == -1) { break; } } ary.push(num); $('#ResultNum').html(num); }
function updateRndNum(){ var flag = 1 while(flag==1){ var num = Math.floor(Math.random()*g_PersonCount+1);//随机生成一个数 flag=arr.indexOf(num); } ary.push(num); $('#ResultNum').html(num); }
这个其实很简单
假设你们有20个人,先生成一个数组[],数组里面可能存放的是员工号
1,然后生成随机范围在 1-20 内的随机数,这个数作为数组的下标,取出这个下标对应的数作为中奖号码,数组内删除这个下标,数组长度变成19
2,然后生成随机范围在 1-19 内的随机数,这个数作为数组的下标,取出这个下标对应的数作为中奖号码,数组内删除这个下标,数组长度变成18
....
结束
当然这个算法是有名字的 Fisher-Yates shuffle
算法