2016-11-26 56 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'); 
} 
相关问题