首页 > 解决方案 > “不能返回未定义的长度”的具体情况

问题描述

所以我正在制作这个循环遍历数组并返回数组每个元素中的每个字符的程序。数组中的元素是常规英文行。这是我当前的代码:

(我正在使用 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_line1。但是,问题出在第一条if...else语句上。尝试执行时返回错误array[current_line]。这是未定义的!

我不知道为什么会这样,正如array[1]最明确定义的那样,并且current_line在长度范围内array

请帮忙

标签: javascriptarraystypeerror

解决方案


更改换行函数如下:

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

这将防止错误,尽管您应该真正检查驱动提前功能前进的 some_condition。


推荐阅读