【问题标题】:If statement not working inside foreach loop javascriptif语句在foreach循环javascript中不起作用
【发布时间】:2018-11-19 06:23:35
【问题描述】:

我试图从数组中返回大于 25 的第一个值,而不使用过滤器等其他方法。假设数组总是排序的。

函数总是返回未定义的。为什么会这样?代码如下:

function checkArr(arr){
  arr.forEach(i => {
    if (i>25) return i;
  })
}

console.log(checkArr([10,20,34,45]))

输出应该是 34。

【问题讨论】:

  • undefinedforEach 循环中的返回值:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…。如果它返回其他东西,我会感到惊讶......
  • 那我该如何继续?我应该使用 for 循环吗?再一次,没有其他方法可以使用?
  • 你没有返回 arr.forEach 的结果,这就是为什么 checkArr 返回 undefined。还有其他方法可以做你想做的事,我相信答案会涵盖这一点。
  • const checkArr = arr => arr.find(i => i > 25)

标签: javascript foreach


【解决方案1】:

“好的代码是简短、简单和对称的——挑战在于弄清楚如何到达那里”。

function checkArr(arr){
    return arr.filter(m => m > 25)
}
checkArr([10,20,34,45]);

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

当您使用forEach 时,您为数组中的每个项目执行另一个函数。该函数可以很好地返回一个值,但它会被完全忽略。如果你想在checkArr 函数中返回一个值,你必须这样做:

function checkArr(arr) {
  for (let i of arr) {
    if (i>25) return i;
  }
}

【讨论】:

    【解决方案3】:

    这是因为您在调用.forEach 时传递了一个委托函数。

    委托的返回正在丢失并且不适用于任何东西。为了得到你想要的结果,你需要退出调用函数checkArr

    这可以使用一个简单的 for 循环来完成。

    function checkArr(arr){
        for (var i = 0; i < arr.length++; i++) {
            if (arr[i] > 25) return arr[i];
        }
    }
    
    console.log(checkArr([10,20,34,45]))

    这种方法也支持旧版浏览器,不像某些,every 和 forEach

    【讨论】:

      【解决方案4】:

      forEach() 方法对每个数组元素执行一次提供的函数。

      从上面的语句很明显,你不能从循环执行的中间返回。

      只要条件为true,就使用for...of循环返回:

      function checkArr(arr){
        for(var item of arr){
          if (item > 25) return item;
        }
      }
      
      console.log(checkArr([10,20,34,45]))

      【讨论】:

        【解决方案5】:

        您可以使用find 函数代替forEach。而且你必须返回这个函数的结果才能得到答案,而不是undefined

        function checkArr(arr) {
          return arr.find(i => i > 25);
        }
        
        console.log(checkArr([10,20,34,45]))

        forEach 函数不返回任何内容,它只是对数组中的每个元素执行一些操作。

        【讨论】:

          【解决方案6】:

          好像你在找find:

          function checkArr(arr) {
            return arr.find(i => i>25);
          }
          
          console.log(checkArr([10,20,34,45]));

          【讨论】:

            【解决方案7】:

            你的函数没有返回任何东西。在forEach 中返回不会有任何效果,因为forEach 总是返回undefined。您可以使用简单的while 循环来执行此操作:

            function checkArr(arr){
              var i = 0;
              while (i<arr.length) {
                if (arr[i]>25) return arr[i];
                i++;
              }
              return null; // if no entry is greater than 25
            }
            
            console.log(checkArr([10,20,34,45]));

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-01-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-10-19
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多