#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 Рад, что это помогло.