Почему console.log () не объединяет строки? - PullRequest
0 голосов
/ 21 октября 2018

В этом примере я пытаюсь напечатать одну звездочку в первой строке, две во второй и т. Д .:

var n = 5;
for (i = 0; i < n; i++) {
  for (j = 0; j < i; j++) {
    console.log('*');
  }
  console.log('\r\n');
}

Вывод должен выглядеть следующим образом:

*
**
***
****
*****

Но в консоли Chrome я вижу это:

*
2 *
3 *
4 *
5 *

Почему это?

Ответы [ 3 ]

0 голосов
/ 21 октября 2018

console.log не предназначен для точного управления рендерингом вывода.Это средство записи журнала, а не API макета терминала.

Оно помещает каждое сообщение журнала в отдельную строку и сворачивает повторяющиеся последовательные сообщения журнала в одно сообщение с подсчетом количества раз егопроизошло рядом с ним.

0 голосов
/ 21 октября 2018

Это происходит потому, что для ясности инструменты dev обрабатывают несколько вхождений одного и того же значения.

Вы можете использовать массив для достижения желаемого эффекта.Также обратите внимание, что мы изменили j<i на j<=, чтобы он выводил 5-е число.

Затем мы используем метод .join(''), чтобы сгладить массив в строку.

Кроме того, поскольку мы ведем console.log на каждом цикле итерации , новая строка будет добавлена ​​автоматически, так как это один лог на цикл .

var n = 5;
for (i = 0; i < n; i++) {
  var arr = [];
  for (j = 0; j <= i; j++) {

    arr.push('*');

  }
  console.log(arr.join(''));
}

Обратите внимание, что вам не понадобится массив, если вы печатаете его в DOM - он будет работать так, как вы изначально предполагали.

Обновление: Ивар также сделал отличное решение, в котором используется функция String.repeat(), которая требует от вас использования только одной петли.

var n = 5;
for (i = 1; i <= n; i++) {
  var str = '*';
  str = str.repeat(i);
  console.log(str);
}
0 голосов
/ 21 октября 2018

Потому что так оно и есть.Каждый вызов console.log выводит новую запись в журнале.Каждая запись в журнале находится в отдельной строке.

Если вы зарегистрируете одну и ту же строку несколько раз, они будут объединены в одну запись с подсчетом впереди.

Не перепутайте console.logс Console.Write в C # или аналогичным.Это больше похоже на Console.WriteLine.

...