2016-09-01 8 views
0

私はコーディングの練習をしていて、この関数で困惑しています。私が作成しようとしている関数は文字列を取り、各単語の繰り返し数を記録することです。問題は、myObject.key = valueを使用してオブジェクトに追加しようとしたときです。varカウントを渡すと、が更新されていても、myObjectに入れられているカウントはまだ0であるです。'count'変数を使用してオブジェクトに追加するとき、var 'count'はまだ0です。

function countWords(string) { 
 
    var myArray = string.split(" "); 
 
    var myObject = {}; 
 

 
    for (var i=0; i<myArray.length; i++) { 
 
    var currentWord = myArray[i]; 
 
    //var count2 = 0; 
 
    var count = 0; 
 
    
 
    for (var j=i+1; j<myArray.length; j++) { 
 
     var nextWord = myArray[j]; 
 
     console.log(currentWord + ' and a ' + nextWord) 
 
     console.log('countBefore: '+count) 
 
     if (currentWord===nextWord) { 
 
     count += 1; 
 
     } 
 
     console.log('countAfter: '+count) 
 
    }//for loop2 
 
    
 
    console.log('countOutside: '+count) 
 
    myObject[currentWord] = count; 
 
    }// for loop 
 
    
 
    return myObject; 
 
} 
 

 
//console.log(countWords('blah blah the the the he she be')); 
 
console.log(countWords('blah blah the the the she'));

print文のいくつかは、おそらく不要ですが、ので、私はそれを左に理解することが有用であろう。

答えて

1

私はこの問題は、各単語の数を上書きしていることであると信じてその前の同じ言葉のいずれかのしたがって、カウントされた後に各単語を削除するか、新しい値が高い場合は特定の単語のcount値のみを変更する必要があります。

function countWords(string) { 
    var myArray = string.split(" "); 
    var myObject = {}; 

    for (var i=0; i<myArray.length; i++) { 
    var currentWord = myArray[i]; 
    //var count2 = 0; 
    var count = 0; 

    for (var j=i+1; j<myArray.length; j++) { 
     var nextWord = myArray[j]; 
     if (currentWord===nextWord) { 
     count += 1; 
     } 
    } 
    if (!myObject[currentWord] ||count > myObject[currentWord]){ 
     myObject[currentWord] = count; 
    } 
    }// for loop 

    return myObject; 
} 

//console.log(countWords('blah blah the the the he she be')); 
console.log(countWords('blah blah the the the she')); 

(あなたは間違いなく、後でインスタンス上の小さな数を取得しますので)あなたはおそらく、あなたはすでにそれの価値を持っている場合は単語をカウントするために悩まないで、これは、より効率的な

+0

おかげで、あなたは追加if文を拡張できます。

は、ここではいくつかのコメントをクリーンアップ作業フィドルです。 0でない場合、またはcountが以前に記録されたカウントよりも大きい場合は、myObjectに追加しますか? – jaysonder

+0

'!myObject [currentWord]'は、まだそのインデックスを定義していない場合に処理します。あなたが持っていない場合は、値を保管してください。お持ちの場合は、それが高い場合にのみ保管してください。しかし、おそらく '!myObject [currentWord]'だけでうまくいくでしょう。 – StephenTG

0

を作ることができますfor (var j=i+1; j<myArray.length; j++) {currentWordnextWordが真である場合を除いて、finalCountが0になるため、オブジェクトの値が0に設定されるため、問題はj = i + 1によって発生します。

私はあなたの関数名を理解しているので、文字列を取得して各単語のインスタンス数を調べる必要があります。迅速かつ簡潔な応答のための https://jsfiddle.net/gzqm5k0d/

関連する問題