Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何重组forEach这样我就可以摆脱它了_Javascript_Arrays_Foreach - Fatal编程技术网

Javascript 如何重组forEach这样我就可以摆脱它了

Javascript 如何重组forEach这样我就可以摆脱它了,javascript,arrays,foreach,Javascript,Arrays,Foreach,我在使用JavaScript和来自Ruby背景的“break”语句时遇到了很多麻烦 以下是我的功能: function isItTheNumber(numberToGuess){ if(previousGuess === null){ previousGuess = [playersGuess]; } previousGuess.forEach(function(guess){ if(playersGuess === guess &&a

我在使用JavaScript和来自Ruby背景的“break”语句时遇到了很多麻烦

以下是我的功能:

function isItTheNumber(numberToGuess){

    if(previousGuess === null){
      previousGuess = [playersGuess];
    }

    previousGuess.forEach(function(guess){
      if(playersGuess === guess && previousGuess > 1){
        textStatus.style.display = 'block';
        textStatus.innerHTML = 'You already picked that number';
      } else if(parseInt(playersGuess) === parseInt(numberToGuess)){
        textStatus.style.display ='block';
        textStatus.innerHTML = 'You Are CORRECT!';    
      } else {
      previousGuess.push(playersGuess);
      textStatus.style.display='block';
      textStatus.innerHTML = 'You are ' + hotOrCold();
      document.getElementById('guess-count').innerHTML = playerGuessCount++;
    }
  });
}
在.forEach循环中,我希望在第一个if语句中有一个“break”语句。如果循环执行此块,我希望它停止

在阅读了一些关于break语句的文章之后,我意识到我不能在这个forEach函数中使用break语句。我尝试使用“every”来表示这个建议,但是当我在一个函数中使用它时,我无法返回true或false值

我想避免使用任何类型的“中断”或破解,但如果这是唯一的方法,我会使用它。如果有人对我如何重新设计我的逻辑有任何建议,我将不胜感激。我将在下面的伪代码中列出我的逻辑

1) Check if the previousGuess array is null or populated. If it is null, set it to an array with the first value.
2) Iterate over the previousGuess array.
3) If: see if the user input (playerGuess) is in the previousGuess array. The previous guess
array must be larger than 1.
4) Else If: If the users guess is the same as the a the value, tell them they are correct.
5) Else: if the users guess isn't the same as the value, tell them and add 1 to the playerGuessCount.
我当前逻辑的问题是调用PlayerguesCount的次数太多。如果对数组进行迭代并发现第一个If语句为true,则它仍会对数组的其余部分进行迭代,即使PlayerguesCount只提交一个猜测,也会向PlayerguesCount添加1。forEach严格检查他们的猜测是否重复


下面是我对“every”的尝试。您使用的.forEach方法是通过扩展函数原型实现的包装器

您可以打破传统的循环:

for (var key in objs){
  var obj=objs[key];
  //do your business here

  break; //this line exists the loop
}
但是,如果使用回调函数,则必须通过放置“skip”变量来终止函数调用本身

previousGuess.forEach(function(guess){
  if (this.skip_the_foreach_loop) return;
  if (need_to_exit) this.skip_the_foreach_loop=true;
});

这不是最有效的方法,但可以节省一些CPU周期。

您使用的.forEach方法是通过扩展函数原型实现的包装器

您可以打破传统的循环:

for (var key in objs){
  var obj=objs[key];
  //do your business here

  break; //this line exists the loop
}
但是,如果使用回调函数,则必须通过放置“skip”变量来终止函数调用本身

previousGuess.forEach(function(guess){
  if (this.skip_the_foreach_loop) return;
  if (need_to_exit) this.skip_the_foreach_loop=true;
});

这不是最有效的方法,但可以节省一些CPU周期。

您使用的.forEach方法是通过扩展函数原型实现的包装器

您可以打破传统的循环:

for (var key in objs){
  var obj=objs[key];
  //do your business here

  break; //this line exists the loop
}
但是,如果使用回调函数,则必须通过放置“skip”变量来终止函数调用本身

previousGuess.forEach(function(guess){
  if (this.skip_the_foreach_loop) return;
  if (need_to_exit) this.skip_the_foreach_loop=true;
});

这不是最有效的方法,但可以节省一些CPU周期。

您使用的.forEach方法是通过扩展函数原型实现的包装器

您可以打破传统的循环:

for (var key in objs){
  var obj=objs[key];
  //do your business here

  break; //this line exists the loop
}
但是,如果使用回调函数,则必须通过放置“skip”变量来终止函数调用本身

previousGuess.forEach(function(guess){
  if (this.skip_the_foreach_loop) return;
  if (need_to_exit) this.skip_the_foreach_loop=true;
});

这不是最有效的方法,但可以为您节省一些CPU周期。

这对您正在尝试的工作有效吗

function isItTheNumber(numberToGuess){

    if(previousGuess === null){
      previousGuess = [playersGuess];
    }

    // Using Array.prototype.every so a falsey return breaks
    previousGuess.every(function(guess){
      if(playersGuess === guess && previousGuess > 1){
        textStatus.style.display = 'block';
        textStatus.innerHTML = 'You already picked that number';
        return; // returns undefined which is falsey and breaks loop.
      } else if(parseInt(playersGuess) === parseInt(numberToGuess)){
        textStatus.style.display ='block';
        textStatus.innerHTML = 'You Are CORRECT!';    
      } else {
        previousGuess.push(playersGuess);
        textStatus.style.display='block';
        textStatus.innerHTML = 'You are ' + hotOrCold();
        document.getElementById('guess-count').innerHTML = playerGuessCount++;
      }
      return true; // Meaning go to next iteration
  });
}

这对你想做的事有用吗

function isItTheNumber(numberToGuess){

    if(previousGuess === null){
      previousGuess = [playersGuess];
    }

    // Using Array.prototype.every so a falsey return breaks
    previousGuess.every(function(guess){
      if(playersGuess === guess && previousGuess > 1){
        textStatus.style.display = 'block';
        textStatus.innerHTML = 'You already picked that number';
        return; // returns undefined which is falsey and breaks loop.
      } else if(parseInt(playersGuess) === parseInt(numberToGuess)){
        textStatus.style.display ='block';
        textStatus.innerHTML = 'You Are CORRECT!';    
      } else {
        previousGuess.push(playersGuess);
        textStatus.style.display='block';
        textStatus.innerHTML = 'You are ' + hotOrCold();
        document.getElementById('guess-count').innerHTML = playerGuessCount++;
      }
      return true; // Meaning go to next iteration
  });
}

这对你想做的事有用吗

function isItTheNumber(numberToGuess){

    if(previousGuess === null){
      previousGuess = [playersGuess];
    }

    // Using Array.prototype.every so a falsey return breaks
    previousGuess.every(function(guess){
      if(playersGuess === guess && previousGuess > 1){
        textStatus.style.display = 'block';
        textStatus.innerHTML = 'You already picked that number';
        return; // returns undefined which is falsey and breaks loop.
      } else if(parseInt(playersGuess) === parseInt(numberToGuess)){
        textStatus.style.display ='block';
        textStatus.innerHTML = 'You Are CORRECT!';    
      } else {
        previousGuess.push(playersGuess);
        textStatus.style.display='block';
        textStatus.innerHTML = 'You are ' + hotOrCold();
        document.getElementById('guess-count').innerHTML = playerGuessCount++;
      }
      return true; // Meaning go to next iteration
  });
}

这对你想做的事有用吗

function isItTheNumber(numberToGuess){

    if(previousGuess === null){
      previousGuess = [playersGuess];
    }

    // Using Array.prototype.every so a falsey return breaks
    previousGuess.every(function(guess){
      if(playersGuess === guess && previousGuess > 1){
        textStatus.style.display = 'block';
        textStatus.innerHTML = 'You already picked that number';
        return; // returns undefined which is falsey and breaks loop.
      } else if(parseInt(playersGuess) === parseInt(numberToGuess)){
        textStatus.style.display ='block';
        textStatus.innerHTML = 'You Are CORRECT!';    
      } else {
        previousGuess.push(playersGuess);
        textStatus.style.display='block';
        textStatus.innerHTML = 'You are ' + hotOrCold();
        document.getElementById('guess-count').innerHTML = playerGuessCount++;
      }
      return true; // Meaning go to next iteration
  });
}

为什么每个都不能工作?JavaScript没有forEach函数。看起来您正在使用一个实现该功能的框架。也许尝试返回false?@MjrKusanagi我会再次尝试计算出错误,当我使用它时,我将它包装在另一个函数中,并在If语句中使用该函数。我遇到的问题是它没有返回真或假。当我把它从函数中取出来时,我把它包起来,它在全局空间中,它工作得很好,但我不能把它保存在全局空间中。我将重试并添加repl.it链接。谢谢你能把不适用于
的代码张贴在每个
上吗?它应该可以很好地工作……为什么不
每一个
都可以工作呢?JavaScript没有forEach函数。看起来您正在使用一个实现该功能的框架。也许尝试返回false?@MjrKusanagi我会再次尝试计算出错误,当我使用它时,我将它包装在另一个函数中,并在If语句中使用该函数。我遇到的问题是它没有返回真或假。当我把它从函数中取出来时,我把它包起来,它在全局空间中,它工作得很好,但我不能把它保存在全局空间中。我将重试并添加repl.it链接。谢谢你能把不适用于
的代码张贴在每个
上吗?它应该可以很好地工作……为什么不
每一个
都可以工作呢?JavaScript没有forEach函数。看起来您正在使用一个实现该功能的框架。也许尝试返回false?@MjrKusanagi我会再次尝试计算出错误,当我使用它时,我将它包装在另一个函数中,并在If语句中使用该函数。我遇到的问题是它没有返回真或假。当我把它从函数中取出来时,我把它包起来,它在全局空间中,它工作得很好,但我不能把它保存在全局空间中。我将重试并添加repl.it链接。谢谢你能把不适用于
的代码张贴在每个
上吗?它应该可以很好地工作……为什么不
每一个
都可以工作呢?JavaScript没有forEach函数。看起来您正在使用一个实现该功能的框架。也许尝试返回false?@MjrKusanagi我会再次尝试计算出错误,当我使用它时,我将它包装在另一个函数中,并在If语句中使用该函数。我遇到的问题是它没有返回真或假。当我把它从函数中取出来时,我把它包起来,它在全局空间中,它工作得很好,但我不能把它保存在全局空间中。我将重试并添加repl.it链接。谢谢你能把不适用于
的代码张贴在每个
上吗?它应该工作得很好。。。