繁体   English   中英

如果语句在foreach循环javascript中不起作用

[英]If statement not working inside foreach loop javascript

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

该函数始终返回未定义。 为什么会这样? 这是代码:

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

输出应该是 34。

使用forEach ,将对数组中的每个项目执行另一个函数。 该函数可以返回一个很好的值,但是它将被完全忽略。 如果要在checkArr函数中返回一个值,则必须执行以下操作:

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

您可以使用find函数代替forEach 而且,您必须返回此函数的结果以获得答案,而不是undefined

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

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

您的函数未返回任何内容。 并且在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])); 

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

从上面的语句中可以明显看出,您不能从循环执行的中间返回。

当条件为true使用for...of循环返回:

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

似乎您在寻找find

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

这是因为调用.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])) 

这种方法还支持较旧的浏览器,与某些浏览器不同

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM