2016-09-27 14 views
0

私はこのコードを持っています。何らかの理由で私はエラー:Uncaught TypeError: Cannot read property 'length' of undefinedを取得します。私は理由を理解できないようだ。配列の文字列要素の長さをjavascriptのforループの変数に設定します

function findShort(s) { 
 

 
    var c = s.split(' '); 
 
    var l = c[0].length; 
 
    var wordlength; 
 

 
    for (var i = 1; c.length; i++) { 
 
    console.log(c[i].length); 
 

 
    wordlength = c[i].length; 
 
    if (l < wordlength) { 
 
     l = wordlength; 
 

 
    } 
 
    } 
 
    return l; 
 

 
} 
 

 
console.log(findShort("hello dog cat 12 asdsad wuidhuiwqhd"));

エラーは、私はそれをCONSOLE.LOG場合、それはアレイ内の各文字列の長さを示す線とwordlength = c[i].length;

あります。しかし、私はその長さを格納しようとすると、それは未定義だと言います。 forループの

+0

ループ中に 'c.length'が変更されないので、無限ループがあります。だからあなたは配列の終わりを過ぎて行きます。 – Barmar

+0

doh!私はそれを気付かなかったとは信じられません。どうもありがとうございます。 – sourlemonaid

+0

'console.log(Math.min.apply(null、 'クイックブラウンフックスjumped'.split(' ').map(w => w.length))); // "3"を出力する –

答えて

3
あなたはこの行を変更する必要が

for (var i = 1; c.length; i++) { 

for (var i = 1; i<c.length; i++) { 

に二componenetはループかどうかを判断するために、ループのすべてのラウンドのためにチェックされているブール条件です続けるべきかどうか。 c.lengthを入力すると、ループが実行されないようにする定数が与えられます( c.lengthが0の場合)。または( c.lengthが0でない場合は)永久に実行されます。

また、次の行には注意する必要があります:cは、少なくとも一つの要素を持っていることが保証されていないとして、それはあまりにも問題を引き起こす可能性があります

var l = c[0].length; 

+0

私は馬鹿です。それを気付かずに私はコードを100回流しました。どうもありがとうございました – sourlemonaid

関連する問題