有没有办法缩短我的代码?

Posted

技术标签:

【中文标题】有没有办法缩短我的代码?【英文标题】:Is there a way to shorten my code? 【发布时间】:2016-11-26 06:04:56 【问题描述】:

出于练习目的,我用 javascript 编写了这个小程序,它运行得非常好。我只是想遵循我学到的不要重复自己的规则,我想知道是否有任何方法可以简化我目前拥有的代码(特别是检查 Rattata 是否拼写正确的 6 个 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();
     

提前感谢任何帮助我的人。

【问题讨论】:

如果 (letter==='Rattata') 可以 @barudo 这将失败,因为letter 是一个数组。现在 letter 可以更改为字符串 - 现在不是。 所以你需要把它改成字符串...... 这个问题需要发到codereview.stackexchange.com而不是这里,因为这看起来更像是关于重构和cmets的意见 【参考方案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(););

【讨论】:

Math.random() &gt;= .5 会更好【参考方案2】:

试试这个:

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

if(letter==='Rattata')
    console.log('Correct');
else
    console.log('Wrong');

【讨论】:

【参考方案3】:

您不需要比较字符串和缓冲字母。

您将在每次通话中使用"attata" 这个词。因此,您可能想利用它。 当Math.round(Math.random()) 等于1 时生成“a”,否则生成“t”。所以你实际上为每个 Math.random() >= 0.5 生成“a”。您可能也想利用这一点 因为我们有 2 个字母来确定它是否匹配,所以我们可以使用布尔值代替字母。 “a”为真,“t”为假 当您需要操作数组时,使用内置函数会更好地提高性能

这里是 sn-p,它显示了我想在上面说的内容。 它的工作原理与您的需要相同,但针对速度进行了优化。

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');

【讨论】:

以上是关于有没有办法缩短我的代码?的主要内容,如果未能解决你的问题,请参考以下文章

我的注释代码在 Eclipse 中变成了一行 [重复]

有没有办法可以缩短这个 if 语句?

python if语句太长太丑,有没有办法缩短它[重复]

试图缩短我的代码以使多个模式工作 javascript

核心数据 NSFetchedResultsController 代码缩短

缩短多余的 switch 语句