例如,我正在进行http://eloquentjavascript.net练习,其中一个教程是创建输出:
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
# # # #
给出的答案是:
var size = 8;
var board = "";
for (var y = 0; y < size; y++) {
for (var x = 0; x < size; x++) {
if ((x + y) % 2 == 0)
board += " ";
else
board += "#";
}
board += "\n";
}
console.log(board);
我的回答是:
var tile = "#";
var piece = "";
var switche = false;
var columns = prompt("enter number of columns","");
var rows = prompt("enter number of rows","");
var lastPiece = "blank";
for (var x = 0; x < columns; x++)
{
if (lastPiece == "#")
{
piece += tile;
lastPiece = "blank";
}
else if (lastPiece == "blank")
{
piece += " ";
lastPiece = "#";
}
var row1 = piece;
}
var lastPiece = "#";
var piece = "";
for (var x = 0; x < columns; x++)
{
if (lastPiece == "#")
{
piece += tile;
lastPiece = "blank";
}
else if (lastPiece == "blank")
{
piece += " ";
lastPiece = "#";
}
var row2 = piece;
}
for (var i = 1; i <= rows; i++)
{
if (!switche){
document.write(' '+ row1 + '<br>');
switche = true;}
else if(switche){
document.write(' ' + row2 + '<br>');
switche = false;}
}
我没有经验,但我已经看到将来会有很多人写不必要的代码。是否有一些好的方法来防止这种或工具?
答案 0 :(得分:1)
(Un?)肯定没有可用于优化某些任意JS代码的工具,你的大脑就是你真正需要的东西(正如Greg Hewgill所说)。
正如一个挑剔,下面是一个代码,它应该比给定的练习答案更有效。
var line = ' # # # #',
n,
str = '';
for (n = 0; n < 8; n++) {
str += ((n % 2 === 0) ? line : line.trim()) + '\n';
}
console.log(str); // Could be also put as element.innerHTML when replacing \n with <br> and replacing the leading space in line with
&#13;
答案 1 :(得分:1)
我认为有效率取决于你的意思。显然,只需打印输出就是你所能做到的“最快”:
console.log(“#### n ##### n #### n #### n ##### n ## ### n #### n ############################################### ##“)//没有什么会因为速度而打败这个。
但是,您也可以使用不同的含义来提高效率:程序占用多少空间。理想情况下,我们希望它占用的空间少于输出。上面的程序虽然非常快,但却比输出多占用了13个字符(那你为什么不直接存储输出呢?)。如果我们稍微调整一下:
a =“##### n #### n”; 的console.log([,,,,,]。加入(a))的
现在,我们已经从原始输出大小中保存了整整16个字符。它当然比我们原来的“只打印答案”解决方案慢。
计算机始终能够找到我们的顶级解决方案“非常困难”。但是,计算机有时可以优化它,并且不会更改实际代码(在引擎盖下)。