2016-11-26 7 views
-3

私はこの小さなプログラムをjavascriptで実践目的で書いています。私はちょうど私が学んだことを自分自身をルールを繰り返さないようにしようとしています、私は現在持っているコードを簡素化する方法があるかどうか疑問に思っています(特にRattataが正しいかどうかをチェックするif文)。コードを短くする方法はありますか?

var spelledWrong = true 

function spellRattata() { 
    var letter = ["R"]; 
    for(var i = 0; i < 6; i++) { 
     var a = Math.round(Math.random()); 
     if(a) { 
      a = "a"; 
      }else{ 
       a = "t"; 
       }; 
       letter.push(a); 
    }; 
    if(letter[1] === "a") { 
     if(letter[2] === "t") { 
      if(letter[3] === "t") { 
       if(letter[4] === "a") { 
        if(letter[5] === "t") { 
         if(letter[6] === "a") { 
          for(var i = 0; i < 7; i++) { 
           console.log(letter[i]); 
           }; 
          }; 
         }; 
        }; 
       }; 
      }; 
     }; 
}; 
while(spelledWrong) { 
    spellRattata(); 
    } 

私を助けてくれてありがとうございます。

+1

if(letter === 'Rattata')すると – barudo

+0

@barudo 'letter'は配列なので失敗します。今や 'letter'は文字列に変更される可能性があります - それは今ではありません。 – user2864740

+0

これを文字列に変更する必要があります。 – barudo

答えて

0

はこの試してみてください。

var letter = ['R','a','t','t','a','t','a']; 
letter = letter.join(''); 

if(letter==='Rattata') 
    console.log('Correct'); 
else 
    console.log('Wrong'); 
1
function spellRattata() { 
    var word = "r"; 
    for (var i = 0; i < 6; i++) 
    word += Math.random() > 0.5 ? "a" : "t"; 

    if (word == "rattata") 
    return true; 

    console.log(word); 
    return false; 
} 

while (!spellRattata()); 

をそして、あなたは本当にそれを短くしたい場合:

function spellRattata() { 
    for (var a = "r", b = 0; b < 6; b++) a += Math.random() > .5 ? "a" : "t"; 
    return "rattata" == a || (console.log(a), !1) 
} 

for (; !spellRattata();); 
+0

'Math.random ()> = .5'はより良いでしょう –

0

あなたは文字列を比較すると文字をバッファリングする必要はありません。

  • 呼び出しごとに"attata"という単語を使用します。だからあなたはそれを利用したいかもしれない。
  • Math.round(Math.random())が1に等しい場合は "a"を生成し、そうでない場合は "t"を生成します。だから実際にはMath.random()> = 0.5のそれぞれに対して "a"を生成する。
  • 一致するかどうかを判断する2文字があるので、文字の代わりにブール値を使用することがあります。あなたはここで配列

を操作する必要がある場合、組み込み関数を使用して

  • 「T」のための「」とFALSEのためのTRUEは、パフォーマンスのためのより良いだろう、私は上記の伝えたいものを示してどのようなスニペットがあります。 必要に応じて動作しますが、速度を最適化しています。

    var ATTATA_MAP = [true, false, false, true, false, true]; 
    var spellRattata =() => ATTATA_MAP.every(v => v === (Math.random() >= 0.5)); 
    
    while(!spellRattata()) { 
        console.log('wrong spelled'); 
    } 
    
  • 関連する問題