繁体   English   中英

数组在幕后如何工作?

[英]How do arrays work, behind the scenes?

我想我正在尝试使用基本运算符在JavaScript中创建自己的自定义数组。

我正在阅读的本书“ Eloquent JavaScript”在第1章中有一个练习,要求我使用“打印”功能制作金字塔。 我的解释器中都没有打印功能,也没有说如何制作打印功能。 因此,我没有打印功能,并且正在使用警报。

这是代码。

var line = "";
var counter = 0;
while (counter < 10) {
  line = line + "#";
  print(line);
  counter = counter + 1;
}

因此,我尝试使用警报,而不是:

var line = "";
var counter = 0;
while (counter < 10) {
  line = line + "#";
  alert(line);
  counter = counter + 1;
}

但是警报不是三角形。 这是一堆箱子,磅符号的数量每次都会增加。

我想创建一个字符串连接,然后打印出整个结果。

这是我想出的:

string = "";
counter = 0;
signs = "#";
while (counter < 10){
  string = string + signs + "\n";
  signs = signs + "#";
  counter = counter + 1;
}
alert(string);

因此,我只是想知道,在不知道如何创建数组变量的情况下,有没有更好的方法来创建数组?

您的第一个磅符号(金字塔的顶端)的距离应为金字塔底长的一半。 因此,如果您的底边长为10个#号,那么金字塔的顶部应隔开4个空格,然后打印#号。

其次,要制作一个真正的金字塔,您需要自上而下打印,以便第二行逐渐变大。 用奇数思考:

// Example
Tip: 1 char
2nd row: 3 chars 
3rd row: 5 chars
4th row: 7 chars
5th row: 9 chars
6th row: 11 chars

等等

您的换行符是错误的。 它应该是\\n 如果要打印为HTML,请使用<BR>

或者,您可以使用console.log打印您的字符。

这应该工作

var stringBuilder = "";
counter = 0;
signs = "#";
while (counter < 10){
  stringBuilder = stringBuilder + signs + "\n";
  signs = signs + "#";
  counter = counter + 1;
}
alert(stringBuilder);
  1. 换行符是反斜杠和“ n”
  2. 您只需要循环内的一个换行符

下面的代码应该工作:

string = "";
counter = 0;
signs = "#";
while (counter < 10){
  string = string + signs + "\n";
  signs = signs + "#";
  counter = counter + 1;
}
alert(string);

主要区别如下:

  • 您不能在要构建的字符串中包含换行符,否则先前迭代中的换行符仍将包含在后续迭代中。
  • 换行符是\\n而不是/n
  • string可以开始为空,因为您每次都会附加一个“#”。

换行符是“ \\ n”而不是“ / n”。 (“转义”字符通常是反斜杠而不是正斜杠。)

另外,您输入的错字是sings = ...而不是signs = ...

编辑:好的,所以您已经更新了您的问题以纠正这两个问题。 关于您的问题:

因此,我只是想知道,在不知道如何创建数组变量的情况下,有没有更好的方法来创建数组?

听起来您似乎不太了解数组变量是什么:数组是一种数据结构,可让您存储由索引选择的数据项。 您为什么认为需要一个数组才能使用此“金字塔”功能?

顺便说一句,您的代码可以使用+=++进行改进:

  • a = a + b; 可以缩写为a += b;
  • a = a + 1; 可以缩写为a++;

这将是另一种方式:

<script>
string = ""; height = 10;
for(i = 1; i <= height; i++){
    string += Array(i).join('#') + '<br>';
}
document.write(string);
</script>

输出:

#
##
###
####
#####
######
#######
########
#########

现在进行一些修改:

<script>
string = ""; height = 10;
for(i = 1; i <= height; i++){
    string += Array(height-i+1).join('&nbsp;') + Array(2*i).join('#') + '<br>';
}
document.write(string);
</script>
<style>body{font-family:monospace;}</style>

你得到这个:

         #
        ###
       #####
      #######
     #########
    ###########
   #############
  ###############
 #################
###################

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM