Если оператор не работает внутри цикла foreach, JavaScript - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь вернуть первое значение, которое больше 25, из массива, без использования других методов, таких как фильтр.Предположим, что массив всегда сортируется.

Функция всегда возвращает неопределенное значение.Почему это происходит?Вот код:

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

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

Вывод должен быть 34.

Ответы [ 6 ]

0 голосов
/ 09 июня 2018

Это потому, что вы передаете функцию делегата при вызове .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]))

Этот подход также поддерживает старые браузеры, в отличие от некоторых, каждых и forEach

0 голосов
/ 09 июня 2018

Похоже, вы ищете find:

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

console.log(checkArr([10,20,34,45]));
0 голосов
/ 09 июня 2018

Метод forEach() выполняет предоставленную функцию один раз для каждого элемента массива.

Из приведенного выше утверждения ясно, что вы не можете вернуться изсередина выполнения цикла.

Используйте for...of цикл вместо того, чтобы вернуться, как только условие будет true:

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

console.log(checkArr([10,20,34,45]))
0 голосов
/ 09 июня 2018

Вы можете использовать функцию find вместо forEach.И вы должны вернуть результат этой функции, чтобы получить ответ вместо undefined.

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

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

forEach функция ничего не возвращает, она просто выполняет некоторые действия для каждого элемента в массиве.

0 голосов
/ 09 июня 2018

Ваша функция ничего не возвращает.И возвращение внутрь 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]));
0 голосов
/ 09 июня 2018

Когда вы используете forEach, вы выполняете другую функцию для каждого элемента в массиве.Эта функция может вернуть значение просто отлично, но она будет полностью проигнорирована.Если вы хотите вернуть значение в функции checkArr, вам нужно сделать что-то вроде этого:

function checkArr(arr) {
  for (let i of arr) {
    if (i>25) return i;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...