Search code examples
javascriptfunctionfor-loopreturn

Find the longest word in a string?


I am trying to write a basic javascript function to find the longest word in a string and log it's length.

So far I have:

function findLongestWord(str) {
  var words = [];
  var longest = [];
  words.push(str.split(" "));
  for(var i = 0; i < words.length; i++){
    if (words[i].length > longest[0].length){
      longest.push(words[i]);
    }
  }
  return longest[0].length;
}

findLongestWord('The quick brown fox jumped over the lazy dog');

It makes perfect sense to me, yet it gives me an error. I tried console.logging each step and it fails around the for loop.


Solution

  • When you use words.push(str.split(" ")), the array words looks like

    [
        ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]
    ]
    

    Another problem is that when you check longest[0].length for the first iteration in the for, it is undefined. Which results in the error

    Uncaught TypeError: Cannot read property 'length' of undefined

    To solve this, you can use longest as string instead of array. And in the for, assign the string having the length greater than the current longest string to it.

    At the end of the function, you can return the longest string.

    Problems/Suggestions:

    1. Use str.split(' ') to directly assignment to words variable
    2. Use longest as string variable instead of array and initialize it to empty string, i.e. '', to avoid the above error
    3. Compare the length of the longest with the string in the words array
    4. If the length of the string in words array is greater than the longest, update the longest.
    5. Use \s+ to split the string by spaces

    function findLongestWord(str) {
      var words = str.split(/\s+/);
      var longest = '';
    
      for (var i = 0; i < words.length; i++) {
        if (words[i].length > longest.length) {
          longest = words[i];
        }
      }
      return longest;
    }
    
    var longestWord = findLongestWord('The quick brown fox jumped over the lazy dog');
    
    document.write('Longest Word: "' + longestWord + '"');
    document.write('<br />Longest Word Length: ' + longestWord.length);