2017-03-01 52 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