开发者问题收集

JavaScript 未定义数组索引

2020-12-16
89

我是初学者。我正在做 Coding Addict 的这个练习。

练习:

function longestWords(str){
    let words = str.split(" ");
    let size = 0;
    let max = [''];

    for(let i=0; i<words.length; i++){
        if(words[i].length >= size){
            size = words[i].length;
            if(max[max.length-1].length <words[i].length){
                max = [];
                max.push(words[i]);
            }
            else{
                max = [...max,words[i]];
            }
        }
    }
    return [...max];
}

console.log(longestWords("I woke up early today"));
console.log(longestWords("I went straight to the beach"));

现在,当我尝试将 max[] 数组的索引更改为 i 时。

if(max[i].length <words[i].length){

我收到此错误:

Uncaught TypeError: Cannot read property 'length' of undefined at longestWords

有人能告诉我为什么我不能更改索引而必须使用 max.length-1 吗?

2个回答

当您使用 i 时,它代表 str 中的单个单词。例如,“我今天早起”有 5 个单词(或长度 = 5),但您的 max 数组的长度只有 1(即 '')。因此,如果您使用 i 访问 max 数组,您将获得超出范围的索引。除非您使用的长度与 max 相同的 str。

HW Siew
2020-12-16

因为您的最大数组始终只有一个元素,所以索引 1 中没有条目,即 max[max.length],所以您最好将其写为 max[0]

assellalou
2020-12-16