Элемент массива не определен после того, как я распечатал его с помощью console.log?? Кажется, определяется только после удаления этой строки ..? (Javascript)

#javascript #arrays #return #console.log

#javascript #массивы #Возврат #console.log

Вопрос:

Я хочу вернуть количество истинных значений в приведенном ниже массиве.

 const array = [1,2,3,'',2];

function countTruthy (array) {


let numberCount = 0;

for (let item of array) 

    console.log(item)

    if (item) numberCount  ;

    return numberCount;
 

Но это работает только после удаления этой строки.

 console.log(item)
 

В противном случае я получаю: Неперехваченная ошибка ссылки: элемент не определен
в countTruthy?

Почему?

Бонусный вопрос — независимо от того, как мой оператор return имеет отступ, я получаю тот же результат обратно… но должен ли он быть в «if statement» или «for loop»? Почему?

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

1. начните с массива регистрации консоли и numberCount и посмотрите, каково их значение. Вы не можете устранить неполадки, если не видите все свои данные. Никогда не предполагайте, что что-то работает, всегда проверяйте свои предположения. Мы не можем устранить неполадки с элементом, пока не узнаем, как выглядят окружающие данные

2. вам нужно проверить свои фигурные скобки

3. Вам нужны фигурные скобки для вашего оператора «for»; это после (let item of array) . Вам также не хватает точки с запятой для вашего console.log (то есть, если это имеет значение в вашей среде).

Ответ №1:

Кажется, вам не хватает некоторой области видимости (т.Е. «{ }»). В вашей текущей реализации оператор for будет выполнять только console.log вот почему, если вы удалите его, он выполнит if(item)... и все работы

попробуйте

 for (let item of array) {
  console.log(item);
  if (item) {
    numberCount  ;
  }
}
return numberCount;
 

Важно отметить, что Javascript не является «позиционным» языком, поэтому независимо от того, как вы вводите отступ в код, он будет выполняться одинаково, важны скобки.

Ответ №2:

Я надеюсь, что это будет полезно для вас:

Когда вы не используете фигурные скобки ‘{}’ в «for», любом цикле или условии, для этого процесса берется только следующая строка. В вашем случае, если вы удалите журнал, элемент распознается по значку «for», но если вы добавите журнал в следующую строку, поскольку в нем нет ключей «{}», «for» работает только со следующей строкой, и элемент больше не принадлежит к»для», поэтому он больше не распознается, и вам придется объявить его вне «для»

 const array = [1,2,3,'',2];

function countTruthy (array) {

  let numberCount = 0;

    for (let item of array) 
    {
      console.log(item);
      if (item) numberCount  ;
    }
    return numberCount;
}

countTruthy(array); 

Ответ №3:

Похоже, это проблема с отступом. Используйте скобки, чтобы закрыть функцию и цикл for, подобный этому:

 const array = [1,2,3,'',2];

function countTruthy (array) {

  let numberCount = 0;

  for (let item of array) {
    console.log(item)

    if (item) numberCount  ;

  }
  return numberCount;
}