#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 (), и для этого не было условия остановки.