初学者javascript,显示数组中以前的数字并重置函数

初学者javascript,显示数组中以前的数字并重置函数,javascript,html,css,Javascript,Html,Css,嗨,我对javascript真的很陌生,我已经向自己提出了挑战,要做一个真正基本的宾果数字机。我已经生成了一个由20个数字组成的数组,将这些数字洗牌,每次画一个数字时,我都会在棋盘上添加一个标记。我有一个分为两部分的问题,我知道对你们中的一些人来说很容易,但这让我发疯 第一部分 我添加了一个重置按钮,该按钮将接受标记为红色的方块并删除类。然而,我想做的是,每次按下重置按钮时,我都要重新排列阵列,这一点我还没有弄清楚 第二部分 作为增加此显示功能的一部分,我还添加了上一个数字部分,显示上次拾取的数

嗨,我对javascript真的很陌生,我已经向自己提出了挑战,要做一个真正基本的宾果数字机。我已经生成了一个由20个数字组成的数组,将这些数字洗牌,每次画一个数字时,我都会在棋盘上添加一个标记。我有一个分为两部分的问题,我知道对你们中的一些人来说很容易,但这让我发疯

第一部分 我添加了一个重置按钮,该按钮将接受标记为红色的方块并删除类。然而,我想做的是,每次按下重置按钮时,我都要重新排列阵列,这一点我还没有弄清楚

第二部分 作为增加此显示功能的一部分,我还添加了上一个数字部分,显示上次拾取的数字。虽然我确信有更好的方法可以做到,但我还是在一定程度上成功了。我还在努力隐藏总是在开头显示的“未定义”输入。但我相信有一种方法可以做到这一点,如果我不需要隐藏未定义的类的话

提前谢谢你的帮助,你太棒了

另外,我现在只想在纯javascript中工作

//此位洗牌数组
函数洗牌(数组){
var i=array.length,
j=0,
临时雇员
而(我--){
j=数学地板(数学随机()*(i+1));
//将随机选择的元素与当前元素交换
温度=阵列[i];
数组[i]=数组[j];
数组[j]=温度;
}
返回数组;
}
//数组输入
var ranNums=洗牌([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]);
//此位调用数组的位置
var f=0;
var g=-1;
//要显示的当前项的索引
函数nextNumber(){
var randNum=ranNums[f++];
document.getElementById('current')。innerHTML=randNum;
if(f==ranNums.length)f=0;//如果到达末尾,则重置为第一个元素
document.getElementById(“项”+randNum).className=“红色”;
}
函数lastNumber(){
var pass=ranNums[g++];
document.getElementById('previous').innerHTML=pass;
如果(过去==“未定义”){
document.getElementById('previous').style.display='none';
}
}
//移除类并重置游戏
函数resetNumbers(){
对于(变量i=0;i
正文{
背景色:白色;
颜色:黑色;
字体大小:20px;
字体系列:“Lucida Grande”,Verdana,Arial,Helvetica,无衬线;
}
h1,th{
字体系列:佐治亚州,“泰晤士报新罗马”,泰晤士报,衬线;
}
h1{
字号:28px;
}
桌子{
边界塌陷:分离;
边界间距:30px;
浮动:左;
}
th,td{
填充:30px;
边框:2个黑色实心;
文本对齐:居中;
宽度:20%;
}
氢{
}
钮扣{
}
瑞德先生{
背景色:红色;
}
宾果!
当前编号
以前的号码

您可以检查是否定义了“上一个数字”字段,并且仅在以下情况下显示值:

document.getElementById('previous').innerHTML = past ? past : '';
这是使用三元运算符,执行与此相同的操作:

if (past) {//check if past is not null or undefined
  document.getElementById('previous').innerHTML = past;
else {
  document.getElementById('previous').innerHTML = '';
}

修改代码笔:

对于未定义的问题,您正在将未定义作为字符串进行检查。未定义就是未定义,所以

if(past === "undefined") {
    document.getElementById('previous').style.display='none';
}
应该是

if(past === undefined) {
    document.getElementById('previous').style.display='none';
}
对于重新洗牌问题,您已经有了
shuffle
函数,并且已洗牌的数字存储在
ranNums
变量中,因此您只需再次通过
shuffle
函数运行一组数字,并在调用reset时将其分配给
ranNums
变量,因此

// Removes the class and resets the game
function resetNumbers() {
    for (var i = 0; i < ranNums.length; i++) {
       document.getElementById("item" + ranNums[i]).className = "";

    }

  ranNums = shuffle([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]);
}
//删除类并重置游戏
函数resetNumbers(){
对于(变量i=0;i
现在,这是回答您的问题的基本方法,因此我将提出一些其他改进:

  • 将要洗牌的数字数组保留在一个变量中,这样就不必在重置函数中重复它
  • 按下重置按钮时,从当前号码中删除该号码
  • 如果您还没有,请仔细阅读
    ==
    ==
    之间的差异,您在不同的
    If
    语句中使用了这两种语言
  • 阅读有关JavaScript对象的内容,并尝试将所有代码包含在一个对象中,这样就不会污染全局名称空间(这实际上不是您目前所做工作的问题,但这是一个好习惯)

  • 除此之外,干得好,坚持下去

    我建议你做以下两件事:

    • 第1部分:使用一个新数组,该数组将包含两个数字,当前和以前,并在选择新数字时更新该数组。不需要通过循环进行简单的检查

    • 使用ranNums数组从中生成HTML表,然后当您洗牌数字数组时,可以重新生成HTML表


    我只是给了你一个更好的方法来实现它的想法。如果你想进一步澄清一些事情,请告诉我。谢谢

    加载页面时,框中的数字不会随机化。