Конкретный случай «не может вернуть длину неопределенного»

#javascript #arrays #typeerror

Вопрос:

Поэтому я создаю эту программу, которая перебирает массив и возвращает каждый символ в каждом элементе массива. Элементы в массиве представляют собой строки обычного английского языка. Вот мой текущий код:

(Кстати, я использую javascript)

 let array = ["this", "does", "not", "work"]
var current_pos_in_line = -1
var current_line = 0
var current_char
function advance() {
    current_pos_in_line  = 1
    if (current_pos_in_line < array[current_line].length) {
        current_char = array[current_line][current_pos_in_line]
        return current_char
    } else {
        current_char = null
        newline()
    }
}
function newline() {
    current_line  = 1
    current_pos_in_line = -1
    advance()
    

}

for (some_condition) {
    advance()
}
 

Итак, вы поняли основную идею. advance Функция выполняет цикл по строке current_line, и когда она доходит до конца, она увеличивается current_line на 1. Однако проблема заключается в первом if...else утверждении. Когда я пытаюсь это сделать, возвращается ошибка array[current_line] . Это неопределенно!

Я понятия не имею, почему это так, как array[1] наиболее определенно определено, и current_line находится в пределах длины array

Пожалуйста, помогите

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

1. это не определено, иначе это не сказало бы вам об обратном. Ты, наверное, звонишь advance слишком много раз.

2. Когда вы позвоните newline() после последнего символа последнего слова, current_line будет указано после конца array .

3. В каком состоянии for (some_condition) вы находитесь ?

4. Проверять if (current_line < array.length)

5. @Alanduan, Но, по-видимому, он звонит advance() слишком много раз, так что условие неверно. Так что это важно.


Ответ №1:

Измените функцию новой строки следующим образом:

 function newline() {
  if (current_line < array.length - 1) {
    current_line  = 1
    current_pos_in_line = -1
    advance()
  }
}
 

Это предотвратит ошибку, хотя вам действительно следует проверить условие some_condition, которое продвигает функцию advance вперед.

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

1. Большое спасибо за это, это действительно решило мою проблему. Проблема заключалась в том, что advance() просто вызывал newline (), и для этого не было условия остановки.