Функция JavaScript не выдает правильный вывод

#javascript

#javascript

Вопрос:

У меня есть следующая функция.

 function checkWinner (results)
{ 
  for (var i = 0; i < results.length; i  )
  if (results[i] > 50)
  {
    var win = results[i];
    return win;
  }
  else if  (results[i] < 50)
  {
    var win = 0;
    return win;
  }
}
  

массив результатов равен:

 var results = [12,32,53,12,23];
  

Однако я получаю out 0, когда ожидаю 53.

я вызываю функцию, используя:

 var win = (checkWinner(results));
  

Когда я удаляю оператор else if из кода, я получаю правильный ответ 53. Итак, я предполагаю, что я делаю что-то не так там. Есть идеи?

Комментарии:

1. Ну, на самом деле вы только сравниваете первое значение массива. Вы немедленно возвращаетесь из функции на первой итерации цикла (если значение не равно 50).

2. Что вы на самом деле пытаетесь проверить? Что массив содержит любое число, большее 50? Какой элемент массива больше 50? Что, если имеется несколько элементов массива > 50? Некоторый контекст здесь был бы отличным.

3. Хотя кому-то было бы легко решить проблему за вас, для вас было бы гораздо полезнее научиться просматривать код с помощью отладчика и разобраться в нем самостоятельно. Попробуйте getfirebug.com после того, как вы ее установили, на вкладке «Скрипт» доступен отладчик.

Ответ №1:

Функция всегда возвращает результат из цикла «for» на первой итерации, в которой значение не равно 50. Подумайте об этом: ваше условие «если» будет возвращено из функции, когда значение будет больше 50, а также когда оно будет меньше 50. В ваших тестовых данных первый элемент массива меньше 50, поэтому вы получаете ноль.

Поскольку вы уже обнаружили, что удаление части «else» устраняет проблему, что еще вам нужно?

Комментарии:

1. Ах да, хорошо, я вижу ошибку. Спасибо.

Ответ №2:

Если вы пройдетесь по своему коду либо в отладчике, либо на бумаге, ошибка должна стать очевидной.

По сути, самый первый элемент в массиве вызывает выполнение предложения else, и в этом предложении вы сразу возвращаетесь. Таким образом, функция проверяет только самый первый элемент.

Ответ №3:

Что произойдет, если у кого-то в результате будет 50 ??.. secode должен быть else, а не else, если

Main это происходит потому, что вы явно возвращаете 0.

 function checkWinner (results)
{ 
  for (var i = 0; i < results.length; i  )
  {
    if (results[i] > 50)
    {
      return results[i];
    }
    else
    {
      return results[i];
    }
  }
}