文章中で最も長い単語を見つけるために使用できる関数を定義したいと思います。下のこのロジックを使用して、私はまだそれが正しくない理由を理解していません。有効な機能のためにこの機能にどのような調整を加えることができますか
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
私はそれを修正するためにどうすればよいですか。私のコードにはどのような調整が必要ですか。前もって感謝します。
短い方法: 'f.split(」「).reduce(関数(ACC、ヴァル){val.length> acc.length戻りヴァル:ACC;})'。 – Teemu
@ Teemu良いとそれは短いですが、残念ながらそれはバグです。最後の単語が文中の他の単語と同じかそれ以上の場合は、それをドットとともに返します。 –
@Kinduser OPの例ではドットが見えません。とにかく、 "ドットの問題"を修正する正規表現( '/ \ b /')で分割することができます。 – Teemu