Почему console.log () не объединяет строки?

1

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

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 *

Почему это?

  • 1
    Если вы печатаете одну и ту же строку несколько раз, вместо того, чтобы печатать ее на новой строке, консоль разработчика помещает перед строкой число, указывающее, сколько раз эта строка была напечатана одинаково.
  • 0
    Поскольку консоль Chrome является интерактивной, это не простой поток символов стандартного вывода, в который можно печатать строки.
Теги:
console.log

3 ответа

2
Лучший ответ

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

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

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

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

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
    В этом случае вы также можете использовать String.repeat() . В этом случае вам нужен только один цикл.
  • 1
    @ Ивар Отличное дополнение - я добавил его в свой ответ.
3

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

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

  • 0
    Спасибо, есть еще одна проблема, есть ли текст Edit на этом форуме для изменения текста в моем примере?
  • 1
    @ASiDesigner - если у вас есть новый вопрос, вы должны задать новый вопрос, а не редактировать старый.
2

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

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

Не console.log с помощью Console.Write на С# или аналогичном. Это больше похоже на Console.WriteLine.

  • 1
    Так как это побороть? я должен сделать это в строковом объекте и вывести строку в консоль?
  • 0
    @ASiDesigner Точно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню