2016-11-26 79 views
-3

我寫這個小程序在JavaScript中用於實踐目的,它工作得很好。我只是試圖遵循我學到的Do not Repeat Yourself規則,並且我想知道是否有任何方法可以簡化我目前的代碼(特別是檢查Rattata是否拼寫正確的6條語句)。有沒有辦法縮短我的代碼?

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')will do – barudo

+0

@barudo由於'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個字母來確定它是否匹配,我們可以使用布爾值而不是字母。 TRUE爲「a」和假的「T」
  • 使用內置函數會獲得更好的性能,當你需要操作數組

這裏是什麼片段顯示我想上面講什麼。 它的工作原理與您的需求相同,但它針對速度進行了優化。

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'); 
} 
相關問題