2017-03-01 3 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変数に何の増加がなかったことに気づいたので、私がやりました

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)) 

このメッセージ

を返しました:私のように、以下のような方法で、jの増加を作ります
Uncaught TypeError : Cannot read property 'length' of undefined 

私はそれを修正するためにどうすればよいですか。私のコードにはどのような調整が必要ですか。前もって感謝します。

+0

短い方法: 'f.split(」「).reduce(関数(ACC、ヴァル){val.length> acc.length戻りヴァル: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

関連する問題