2017-03-01 97 views
0

我想定义一个函数,我可以使用该函数来查找句子中最长的单词。使用下面的逻辑,我仍然不明白为什么它的输出是不正确的。可以对此功能进行哪些调整以获得有效的功能

function longest_word(string){ 
string=string.toLowerCase(); 
list=string.split(' ') ; 
var i=0; 
var j=1; 
while (i<list.length){ 
if (list[j] .length>list[i].length){ 
Long_word =list[j] ; 
} 
else { 
Long_word =list [i]; 
} 
i++; 
} 
return Long_word ; 
} 

我想测试我的功能,所以我做了以下内容:

f= 'I live in Pennsylvania new York ' 
console.log(longest_word (f)) 
returned live as the longest_word 

我想了一会儿,然后注意到有我j变量中没有增量 所以,我没有以类似的方式如下制造Ĵ增加作为I:

function longest_word(string){ 
string=string.toLowerCase(); 
list=string.split(' ') ; 
var i=0; 
var j=1; 
while (i<list.length){ 
if (list[j] .length>list[i].length){ 
Long_word =list[j] ; 

} 
else { 
Long_word =list [i]; 
} 
i++; 
j++ ; // j increases by 1 
} 
return Long_word ; 
} 
f= 'I live in Pennsylvania new York ' 
console.log(longest_word (f)) 

返回该消息

Uncaught TypeError : Cannot read property 'length' of undefined 

我该如何去修复它..应该对我的代码做些什么调整。先谢谢你。

+0

较短的方式:'f.split(”“)。降低(功能(ACC,VAL){返回val.length> acc.length VAL:ACC;}?)'。 – Teemu

+0

@Teemu看起来不错,而且很短,但不幸的是它很有问题。如果最后一个单词是最长的单词,或者与句子中的任何其他单词相同,则它会将它与点一起返回。 –

+0

@Kinduser我在OP的例子中看不到任何点。无论如何,你可以用正则表达式('/ \ b /')分割,这将解决你的“点问题”。 – Teemu

回答

1

可以对此功能进行哪些调整以实现有效功能?

我已经为你制定了一个有效的功能和详细的描述步骤。

var sentence = 'This is a very long sentence with few words.', 
 
    arrOfWords = sentence.slice(0, -1).split(' '), //get rid of the `dot` at the end and split it 
 
    longestWord = ''; 
 
    
 
    arrOfWords.forEach(function(v) { //iterate over every element 
 
     if (v.length > longestWord.length) { //check if element is longer than previous one 
 
     longestWord = v; //if so - replace it 
 
     } 
 
    }) 
 
    
 
    console.log(longestWord); //show result 
 
    

+0

你的代码消耗减少内存和时间..谢谢..真的很有帮助 – Udonse