javascript - js实现随机产生数字抽奖小程序问题 求大神

 zhengping4476 发布于 2022-11-12 06:56

目前代码可以实现随机产生数字,我想加一个数组用来保存抽中的号码 下次产生随机数的时候检查数组中是否存在 不存在才能显示在页面,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 个回答
  • find、 indexOf方法都可以实现 建议去看一下,只用别人的代码,不懂其中的意思没什么用下次还是要查,加油

    2022-11-12 10:59 回答
  • 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();
    }
    

    请输入代码

    2022-11-12 10:59 回答
  • 像这种其实最好给后端做,前端负责显示就好了。

    2022-11-12 10:59 回答
  • 你每次生成数字后,检测数字是否包含在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);
    }
    2022-11-12 10:59 回答
  • 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);
    }
    
    2022-11-12 10:59 回答
  • 这个其实很简单

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

    结束

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

    2022-11-12 10:59 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有