JavaScript — простой, если внутри для

#javascript #loops #conditional-statements

#javascript #циклы #условные операторы

Вопрос:

Возникла проблема со следующим, когда я изучаю основы JS. Мое If работало до того, как я вставил его в For, но теперь, похоже, ничего не работает. Думал о выполнении forEach, но кажется сложным решением для такой простой проблемы (создание другой функции для запуска forEach). Также запускал его через онлайн-проверку кода, и он возвращается чистым.

Надеюсь, я делаю что-то невежественное, например, смещенные вкладки..

 "use strict";

function scan(inputArray) {

  var count = 0,
    iter = 0,
    len = inputArray.length;

  for (iter = 0; iter < len; iter   1) {

    console.log("inside for: "   iter); //diagnostic line, does not display

    if (inputArray[iter] === "contraband") {
      console.log("inside if: "   iter); //diagnostic line, does not display
      count  = 1;
    } //end if

  } //end for

  return count;

} //end function -scan-

// Test Code
const numItems = scan(['contraband', 'dog', 'contraband', 'cat', 'zippers', 'contraband']);
console.log('Number of "contraband": '   numItems); // should be 3  

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

1. Ваше условие цикла for отменено (так и должно быть iter < len )

2. Ах! Это очень полезно, думал, что этот параметр был ‘until true’, а не ‘while true’; теперь цикл бесконечно повторяется, я собираюсь проверить это снова

3. Пропустил вторую ошибку в моем первоначальном обзоре; в условии обновления цикла for вы фактически никогда не обновляетесь iter , так что это должно быть iter = iter 1 , или iter .

4. Ага, значит, iter 1 — это не то же самое, что iter = iter 1 или iter

5. Да, значение iter 1 на самом деле не изменяет iter

Ответ №1:

В цикле for вам нужно иметь 3 оператора, которые:

Оператор 1 — выполняется (один раз) перед выполнением блока кода;

Оператор 2 — определяет условие для выполнения блока кода;

Оператор 3 — выполняется (каждый раз) после выполнения блока кода.

Причина, по которой ваш код не работает, заключается в том, что у вас была ошибка в 3-м операторе, где вы написали iter 1 , без реального изменения значения iter . Что вам нужно было сделать, это написать в 3-м операторе iter = iter 1 OR iter = 1 ИЛИ iter , и все это изменит значение iter на 1.

Цикл for должен быть таким:

 for(iter = 0; iter < len; iter  ) {
    ...
}
  

Ответ №2:

Пожалуйста, попробуйте приведенный ниже код.

  • переменная iter должна быть меньше длины массива
  • Итерацию следует увеличить, чтобы обеспечить доступ к элементам массива.

 "use strict";

function scan(inputArray) {

  var count = 0,
    iter = 0,
    len = inputArray.length;

  for (iter = 0; iter < len; iter  ) {

    console.log("inside for: "   iter); //diagnostic line, does not display

    if (inputArray[iter] === "contraband") {
      console.log("inside if: "   iter); //diagnostic line, does not display
      count  = 1;
    } //end if

  } //end for

  return count;

} //end function -scan-

// Test Code
const numItems = scan(['contraband', 'dog', 'contraband', 'cat', 'zippers', 'contraband']);
console.log('Number of "contraband": '   numItems); // should be 3  

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

1. Это работает! Я просто не вижу, что отличается. Когда > переключился на < для меня, мой цикл продолжался бесконечно со скоростью 0 итераций… Единственное различие, которое я вижу здесь, — это объявления var в каждой отдельной строке?

2. Хороший ответ должен объяснять, что было не так и как вы это исправили, а не просто сбрасывать код и бросать вызов всем, чтобы найти различия.

3. Этот исправленный код, наряду с веткой комментариев к исходному сообщению, помогает прояснить мои недоразумения, спасибо за вашу роль в этом уроке!

4. @Barmar отредактировал мой ответ, чтобы включить ваше предложение.

5. @smx Рад, что это помогло.