【问题标题】:Array reloop to remove previous set of array data generated数组重新循环以删除先前生成的一组数组数据
【发布时间】:2019-02-08 06:39:50
【问题描述】:

当我再次尝试重新运行该函数时,我的文件在第一轮循环中运行良好。当我尝试使用该值进行匹配时,它会显示上一个循环的前一个值,然后它会显示正确的值。如果我一次又一次地运行该函数,它会一直保持先前生成的随机值的值。

for (var i=0; i<9; i++)
  {
    var ranD = Math.floor(Math.random()*33);

    if (mathStar.indexOf(ranD)== -1) {
     mathStar.push(ranD);
     item[i].innerHTML = mathStar[i];
      }
      else {
        i--;
      }
      itemVal[i].value = mathStar[i];

  }

【问题讨论】:

标签: javascript arrays loops


【解决方案1】:

for 循环中使用constlet 替换var 以避免创建全局变量,并且--i 可能在代码中产生意外结果,其中i++ 也用于foor 循环.

【讨论】:

    【解决方案2】:

    这是“mathStar”的第一次出现吗?

    如果这是您第一次使用 mathStar,这意味着它是在全局范围内创建的,这通常会导致混乱。在这种情况下,请查看this

    仅看这一点,您似乎并没有重置“mathStar”值。这样,每当您第 n 次运行此循环时,您使用 mathStar.push(...) 添加到“mathStar”的值也会出现在值列表中。

    【讨论】:

    • 是否有代码可以添加以便它始终重置 mathStar 值?
    • @thefirstlove 如果您说“const mathStar”(或“let mathStar”,取决于您的需要)而不仅仅是“mathStar”,并用一个值初始化它(const mathStar = [] 左右) ,您可以确定 mathStar 值已重置。 TL;DR 初始化值时使用 const/let,并设置初始值(例如空数组 [])。当再次调用此函数时,mathStar 将使用您最初设置的值(在上述情况下为 [])再次创建。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2017-01-02
    相关资源
    最近更新 更多