javascript - js实现随机产生数字抽奖小程序问题 求大神
天蓬老师
天蓬老师 2017-04-11 11:33:31
[JavaScript讨论组]

目前代码可以实现随机产生数字,我想加一个数组用来保存抽中的号码 下次产生随机数的时候检查数组中是否存在 不存在才能显示在页面,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();
}
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(6)
巴扎黑

这个其实很简单

假设你们有20个人,先生成一个数组[],数组里面可能存放的是员工号
1,然后生成随机范围在 1-20 内的随机数,这个数作为数组的下标,取出这个下标对应的数作为中奖号码,数组内删除这个下标,数组长度变成19
2,然后生成随机范围在 1-19 内的随机数,这个数作为数组的下标,取出这个下标对应的数作为中奖号码,数组内删除这个下标,数组长度变成18
....

结束

当然这个算法是有名字的 Fisher-Yates shuffle 算法

阿神
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);
}
黄舟

你每次生成数字后,检测数字是否包含在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);
}
高洛峰

像这种其实最好给后端做,前端负责显示就好了。

PHP中文网
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();
}

请输入代码

黄舟

find、 indexOf方法都可以实现 建议去看一下,只用别人的代码,不懂其中的意思没什么用下次还是要查,加油

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号