如果语句不在foreach循环中运行javascript

时间:2018-06-09 10:38:27

标签: javascript foreach

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

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

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

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

输出应为34。

6 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

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



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

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




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

答案 2 :(得分:1)

你的功能没有返回任何东西。并且在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]));
&#13;
&#13;
&#13;

答案 3 :(得分:1)

  

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

从上面的陈述中可以清楚地看出,你不能从循环执行的中间返回。

使用for...of循环代替条件true时返回:

function checkArr(arr){
  for(var item of arr){
    if (item > 25) return item;
  }
}

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

答案 4 :(得分:0)

好像你正在寻找find

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

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

答案 5 :(得分:0)

这是因为您在调用.forEach时传递了委托功能。

代表的回归正在迷失,并不适用于任何事情。要获得所需的结果,您需要退出调用函数checkArr

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

&#13;
&#13;
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]))
&#13;
&#13;
&#13;

此方法还支持较旧的浏览器,不像某些浏览器,每个和每个forEach