Как работают массивы, за кадром? - PullRequest
2 голосов
/ 29 сентября 2011

Я пытаюсь использовать базовые операторы для создания своего собственного массива в JavaScript, наверное.

Эта книга, которую я читаю, «Красноречивый 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);

Итак, мне просто интересно, есть ли лучший способ для создания массивов, не зная, как создать переменную массива?

Ответы [ 5 ]

2 голосов
/ 29 сентября 2011

Ваш первый знак фунта (верхушка пирамиды) должен располагаться на половине длины основания вашей пирамиды.Итак, если ваша основа имеет длину 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 для печати ваших символов.

1 голос
/ 29 сентября 2011

Должен работать следующий код:

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

Основные различия заключаются в следующем:

  • Вы не можете включить символ новой строки в строящуюся строку, в противном случаесимволы новой строки из предыдущих итераций все еще будут включены в последующие итерации.
  • Символ новой строки - \n, а не /n.
  • string может начинаться как пустой, так как вы будетедобавляя "#" каждый раз.
1 голос
/ 29 сентября 2011

Символ новой строки "\ n", а не "/ n". (Обычно символ «escape» - это обратная косая черта, а не прямая.)

Кроме того, у вас есть опечатка, которую вы сказали sings = ... вместо signs = ...

РЕДАКТИРОВАТЬ: ОК, поэтому вы обновили свой вопрос, чтобы исправить обе эти проблемы. Относительно вашего нового вопроса:

Итак, мне просто интересно, есть ли лучший способ для создания массивов не зная, как создать переменную массива?

Похоже, вы на самом деле не понимаете, что такое переменная массива: массив - это структура данных, которая позволяет хранить элементы данных, которые выбираются по индексам. Как вы думаете, зачем вам нужен массив для этой функциональности "пирамиды"?

Кроме того, ваш код может быть улучшен с помощью += и ++:

  • a = a + b; может быть сокращено до a += b;
  • a = a + 1; может быть сокращено до a++;
1 голос
/ 29 сентября 2011

Это должно работать

var stringBuilder = "";
counter = 0;
signs = "#";
while (counter < 10){
  stringBuilder = stringBuilder + signs + "\n";
  signs = signs + "#";
  counter = counter + 1;
}
alert(stringBuilder);
  1. Новая строка - это обратный слеш и "n"
  2. Вам нужен только один символ новой строки, который находится внутри цикла
0 голосов
/ 29 сентября 2011

Это был бы другой способ сделать это:

<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>

Вы получаете это:

         #
        ###
       #####
      #######
     #########
    ###########
   #############
  ###############
 #################
###################
...