我的代码与“快速的棕色狐狸跳过懒狗”之类的字符串一起运作良好。
但不能使用像“谷歌滚动”这样的字符串。
它说问题是“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");
答案 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");