Tell us what’s happening:
I don’t understand why it keeps returning 3?!
Your code so far
function findLongestWord(str) {
str = str.split(' ').join().split(',');
for (var i = 0; i < str.length; i++) {
return Math.max(str[i].length);
}
}
findLongestWord("The quick brown fox jumped over the lazy dog");
Your browser information:
Your Browser User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
.
Link to the challenge:
https://www.freecodecamp.org/challenges/find-the-longest-word-in-a-string
The first word is “the”, math max of 3 is naturally 3, which you return, function completed.
Your function will end once it hits a return
statement so you are only testing the first substring string of the array and then sending that length back as a result.
str = str.split(' ').join().split(',');
works but is redundant. The first split will give you the array of substrings you wanted.
You’re almost there. Good luck.
So a few things here:
There are three common strategies for this:
- Convert to array, sort by length, pick the largest (it’ll be at one end).
- Convert to array, get all the lengths, get the max of those lengths.
- Convert to array, loop through and keep track of current and previous length, update with the max of the two, return that max once loop complete.
I think you’re trying to do 2. Math max doesn’t do anything in your code because you’re getting the max of a single value, eg for length 3, the max is always 3: you only test one number at a time. You would normally put all the lengths in a new array, and when you’ve finished the loop, return the max of that. You need to return after the loop ends.