Ya resolví esto usando una función de división, pero todavía estoy confundido en cuanto a por qué mi código anterior de solo bucle no funciona cuando intento encontrar la palabra más larga en una cadena en javascript. Se supone que la función que estoy escribiendo devuelve el número de letras de la palabra más larga. Después de usar la consola, cada vez que uso solo una palabra, devuelve el valor con el que inicialicé el contador de letras (que es 0). Si la palabra más larga es la última palabra, devuelve la segunda palabra más larga de las palabras anteriores. Si la palabra más larga está en cualquier lugar excepto en la última palabra, el resultado es exacto. Parece que tiene problemas para contar las letras de la última palabra. Aquí está mi código.
let lettCount = 0; let largest = 0; let spaceCheck = /\s/; for(let i = 0; i < str.length; i++) { if(spaceCheck.test(str[i]) == true) { if(lettCount > largest) { largest = lettCount; } lettCount = 0; } else { lettCount++; } } return largest;Debería poder simplificar la lógica aquí significativamente, usando String.split() y Math.max() .
Dividimos la cadena en una matriz, luego usamos Array.map() para obtener la longitud de cada palabra, luego usamos Math.max() junto con la sintaxis Spread para obtener la palabra más larga.
let str = 'the longest word is dinosaur'; function getLongest(str) { return Math.max(...str.split(/\s/).map(s => s.length)); } console.log('Longest word:', getLongest(str));También puedes hacer esto con String.split() y Array.reduce() , esto es incluso un poco más simple:
let str = 'the longest word is dinosaur'; function getLongest(str) { return str.split(/\s/).reduce((acc,s) => s.length > acc ? s.length: acc, 0); } console.log('Longest word:', getLongest(str));