在字符串javascript中找到最长的单词

时间:2015-12-08 19:31:41

标签: javascript

我的代码与“快速的棕色狐狸跳过懒狗”之类的字符串一起运作良好。

但不能使用像“谷歌滚动”这样的字符串。

它说问题是“TypeError undefined不是一个对象(评估'Astr [i] .length')”。

function findLongestWord(str) {
    var Astr = str.split(" ");
  var t = Astr[0].length;
  var Al = Astr.length;
  var j = 0;
  for(var i =1; i < t;i++)
  {
      if(t < Astr[i].length)
      {
        t = Astr[i].length;
        j = i;
      }
  }
  str = Astr[j];
  return str.length;
}

findLongestWord("Google do a barrel roll");

3 个答案:

答案 0 :(得分:1)

你的'for'循环中的变量存在问题。

如您所见,您拆分数组并获取数组中第一个成员的长度 所以基本上你得到第一个字长而不是字数

var Astr = str.split(" ");
var t = Astr[0].length;

在这里,您可以看到使用't'(第一个字长)作为循环边界。

for(var i =1; i < t;i++)

保持您的代码简单&amp;通过这种方式可读,它是可维护的。

function findLongestWord(str) {
   var words = str.split(" ");
   var words_count = words.length;

   var longest_word_length = 0;

    for(var i = 0; i < words_count; i++){
       if(longest_word_length < words[i].length){
           longest_word_length = words[i].length;
       }
    }
    return longest_word_length;
}

findLongestWord("Google do a barrel roll");

请注意,您始终可以使用简写功能

function findLongestWord(str) {
  return str.split(' ').reduce(function(longest, cur) {
     return (cur.length > longest.length) ? cur : longest;
  }, '').length;
}

findLongestWord("Google do a barrel roll");

答案 1 :(得分:1)

以下是改善功能的一种方法:

var str = 'Google do a barrel roll';

function findLongestWord(str) {
  var Astr = str.split(' ');

  if (!Astr.length) {
    throw new Error('findLongestWord(): no words in str');
  }

  var t = Astr[0].length;
  var Al = Astr.length;
  var j = 0;

  for(var i = 0; i < Al; i++)
  {
      if(t < Astr[i].length)
      {
        t = Astr[i].length;
        j = i;
      }
  }
  str = Astr[j];
  return str.length;
}

findLongestWord(str);
//=> 6

你也可以这样做(这有点容易理解):

str.split(' ').reduce(function(longest, cur) {
  return (cur.length > longest.length) ? cur : longest;
}, '');
//=> Google

答案 2 :(得分:0)

function findLongestWord(str)
 {var arr=[];
 arr=str.split(' ');
 arr=arr.sort(function(a,b)
      {
 return b.length-a.length;   /*sorting the array in decending order of 
                                        lengths of each word*/
      });
 var st=arr[0];           /* obviously the first element of the array will 
                             have longest length.*/
 return st.length;
    }
findLongestWord("Google do a barrel roll");