有没有办法缩短我的代码?
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() >= .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');
【讨论】:
以上是关于有没有办法缩短我的代码?的主要内容,如果未能解决你的问题,请参考以下文章