¿Por qué el siguiente código devuelve el error? str es definitivamente una cadena, por lo que no está indefinida. words es una matriz, por lo que llamar a .length también debería ser válido. ¿Qué tiene de malo esta implementación?
TypeError: no se pueden leer las propiedades de undefined (leyendo 'longitud')
function findLongestWordLength(str) { let words = str.split(" "); let longword = words[0]; for(let i = 0; words.length <= terminal; i++){ if(words[i].length >= longword.length){ longword = words[i] } } let longwordlength = longword.length; return longwordlength; } findLongestWordLength("The quick brown fox jumped over the lazy dog"); // why is this giving the error: TypeError: Cannot read properties of undefined (reading 'length')Su condición for es incorrecta. Debería ser si i es más pequeño que el número de palabras, ya que está iterando a través de cada palabra:
function findLongestWordLength(str) { let words = str.split(" "); let longword = words[0]; for(let i = 0; i < words.length; i++){ if(words[i].length >= longword.length){ longword = words[i] } } let longwordlength = longword.length; return longwordlength; } console.log(findLongestWordLength("The quick brown fox jumped over the lazy dog")) Sin embargo, una forma mucho más fácil de realizar esta tarea es dividir la cadena por un espacio, mapear las palabras y obtener la longitud de cada palabra, luego usar Math.max y extender la sintaxis para obtener el elemento más grande:
function findLongestWordLength(str) { return Math.max(...str.split(" ").map(e => e.length)) } console.log(findLongestWordLength("The quick brown fox jumped over the lazy dog"));