Новичок здесь. Я делал это упражнение из 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.info(longestWords("I woke up early today"));
console.info(longestWords("I went straight to the beach"));Теперь, когда я попытался изменить индекс массива max[] на i.
if (max[i].length <words[i].length){
Я получил эту ошибку:
Uncaught TypeError: невозможно прочитать свойство «длина» неопределенного в самых длинных словах
Может кто-нибудь сказать мне, почему я не могу изменить индекс и вместо этого должен использовать max.length-1?
@Rojo спасибо за объяснение! ценить это!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Когда вы используете i, он представляет отдельное слово в строке str. Например, «я сегодня рано проснулся» состоит из 5 слов (или length = 5), но ваш максимальный массив имеет длину только 1 (то есть ''). Поэтому, если вы используете i для доступа к максимальному массиву, вы получите индекс за пределы. Если вы не используете, str имеет ту же длину, что и max.
ага, понял. Я это прекрасно вижу! большое спасибо!
@NickParsons о, понятно, хорошо, я только что отметил это. Спасибо что подметил это!
потому что ваш максимальный массив всегда имеет один элемент, поэтому в индексе 1 нет записи, которая равна max[max.length], поэтому вам лучше написать ее как max[0] вместо этого.
i используется как длина слов в цикле. Если я выйду за пределы length-1, то не будет элемента для проверки. Допустим, слова состоят из 10 элементов. Если вы дойдете до второй итерации цикла, а max не будет добавлено, то вы будете искать max[1], которого еще не существует. Извините за не правильное форматирование, я с мобильного.