首页 > 解决方案 > JavaScript 未定义的数组索引

问题描述

初学者在这里。我在 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){

我收到了这个错误:

未捕获的类型错误:无法读取最长单词处未定义的属性“长度”

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

标签: javascriptarrays

解决方案


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


推荐阅读