Консоль разработчика Chrome JavaScript: можно ли вызвать console.log () без новой строки?


93

Я хотел бы использовать console.log () для регистрации сообщений без добавления новой строки после каждого вызова console.log (). Это возможно?


10
Был ли один из ответов верным?
newenglander

Я думаю, что ответ @minitech правильный: это невозможно. Другие ответы обеспечивают интересную, хотя и несколько ортогональную глубину нашего понимания console.log ().
Дэйв Лэнд,

1
@DaveLand Я считаю, что это вполне возможно, если поддерживать свой собственный буфер дисплея и синхронизировать этот буфер дисплея с фактической консолью с помощью комбинации console.clear()и, например console.log().
Джон Вайс

1
@JohnWeisz: Спасибо, но стирание всей консоли при каждом «встроенном» обновлении не является решением примерно для 99% приложений. Тем не менее, есть припадок.
Дэйв Лэнд,

@DaveLand Да, это больше похоже на взлом - и теперь, когда я огляделся, я понял, что это предлагалось раньше. В любом случае, иногда это может быть полезно.
Джон Вайс

Ответы:


45

Нет, это невозможно. Вам нужно будет сохранить строку и объединить, если вы хотите, чтобы все это было в одной строке, или поместите результат в другое место (скажем, в другое окно).


2
На самом деле, это возможно, но, возможно, не для тех целей, которые задуманы всеми. В моем случае я просто пытался напечатать вопрос, чтобы получить ввод с терминала командной строки. См. Ответ на этот вопрос: stackoverflow.com/questions/26683734/…
deltaray

2
@deltaray readline question- нет console.log. Речь идет также о консоли браузера, а не о Node.js.
Ry-

@minitech вы можете использовать оператор распространения для печати в одну строку. см. в примере jsfiddle.net/imranqau5373/7m65at9L/2
imran khan

@imrankhan: Вопрос был не в этом. Оператор распространения не добавляет здесь ничего нового вместо передачи нескольких аргументов / использования apply.
Ry-

40

В NodeJS вы можете использовать process.stdout.write, и вы можете добавить '\ n', если хотите.

console.log(msg)эквивалентно process.stdout.write(msg + '\n').


15
NodeJS - это не Chrome. Этот ответ не имеет отношения к вопросу «Можно ли console.log без новой строки?» .
Alex

17

Да, это возможно (посмотрите демонстрацию ниже) - путем реализации вашей собственной виртуальной консоли поверх собственной консоли браузера, а затем синхронизации ее с реальной.

Это намного проще, чем кажется:

  1. поддерживать буфер отображения (например, массив строк, представляющих по одной строке каждая)
  2. позвоните console.clear()перед записью, чтобы стереть любое предыдущее содержимое
  3. вызов console.log()(или предупреждение, ошибка и т. д.) для заполнения консоли содержимым из буфера дисплея

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

// =================================================
// Rudimentary implementation of a virtual console.
// =================================================

var virtualConsole = {
    lines: [],
    currentLine: 0,
    log: function (msg, appendToCurrentLine) {
        if (!appendToCurrentLine) virtualConsole.currentLine++;
      
        if (appendToCurrentLine && virtualConsole.lines[virtualConsole.currentLine]) {
            virtualConsole.lines[virtualConsole.currentLine] += msg;
        } else {
            virtualConsole.lines[virtualConsole.currentLine] = msg;
        }
        
        console.clear();
        
        virtualConsole.lines.forEach(function (line) {
            console.log(line);
        });
    },
    clear: function () {
        console.clear();
        virtualConsole.currentLine = 0;
    }
}

// =================================================
// Little demo to demonstrate how it looks.
// =================================================

// Write an initial console entry.
virtualConsole.log("Loading");

// Append to last line a few times.
var loadIndicatorInterval = setInterval(function () {
    virtualConsole.log(".", true); // <- Append.
}, 500);

// Write a new line.
setTimeout(function () {
    clearInterval(loadIndicatorInterval);
    virtualConsole.log("Finished."); // <- New line.
}, 8000);

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


2
Это лучший ответ здесь. Вы даже можете инициализировать, скажем, максимальное количество строк, что делает стек журнала достаточно коротким, так что вы не в конечном итоге регистрируете огромный набор данных.
Matt Way

16

Вы можете положить туда столько вещей, argumentsсколько захотите:

console.log('hi','these','words','will','be','separated','by','spaces',window,document)

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


62
Как это отвечает на вопрос?
JohnAllen

16
Думаю, этот ответ полезен.

12
Это полезно. Несмотря на то, что он не отвечает на вопрос, он предлагает решение того, что большинство людей будут искать, когда найдут этот вопрос.
Шон Линч,

1
Причина, по которой кто-то хочет печатать без новой строки, заключается в том, что следующий вывод неизвестен. Или просто представьте «панель загрузчика», например, с точками.
Карл Адлер

Использование нескольких аргументов нарушает стиль console.log, так как вы можете стилизовать только первый аргумент.
Qwerty

12

Короткий ответ: нет.

Но

Если ваш вариант использования включает попытку регистрировать постоянно меняющиеся данные, избегая при этом раздувания консоли, то один из способов добиться этого (в некоторых браузерах) - использовать console.clear()перед каждым выводом.

function writeSingleLine (msg) {

  console.clear();
  console.log(msg);

}

writeSingleLine('this');
setTimeout( function () { writeSingleLine('is'); }, 1000);
setTimeout( function () { writeSingleLine('a'); }, 2000);
setTimeout( function () { writeSingleLine('hack'); }, 3000);

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

Отказ от ответственности: я бы назвал это взломом.


3
Очень хакерский, но умный. Если вы отслеживали, что уже было записано в консоль (скажем, поддерживая какой-то виртуальный буфер), вы можете перестраивать буфер и добавлять новую строку каждый раз, когда вы очищаете.
danShumway

2

Если ваша единственная цель - остановить печать на многих строках, один из способов - сгруппировать значения, если вы не хотите, чтобы они заполняли всю консоль

PS: - Увидимся в консоли браузера для вывода

let arr = new Array(10).fill(0)


console.groupCollapsed('index')

arr.forEach((val,index) => {
  console.log(index)
})

console.groupEnd()

console.group

console.groupCollapsed


1

Кое-что об идее @shennan:


1

соберите свой вывод в массив, а затем используйте функцию соединения с предпочтительным разделителем

function echo(name, num){
    var ar= [];
    for(var i =0;i<num;i++){
        ar.push(name);
    }
    console.log(ar.join(', '));
}

echo("apple",3)

проверьте также Array.prototype.join () для подробностей режима

var elements = ['Fire', 'Wind', 'Rain'];

console.log(elements.join());
// expected output: Fire,Wind,Rain

console.log(elements.join(''));
// expected output: FireWindRain

console.log(elements.join('-'));
// expected output: Fire-Wind-Rain

0

Вы можете использовать оператор распространения для вывода вывода в одну строку. Новая функция javascript ES6. см. ниже пример

   for(let i = 1; i<=10; i++){
        let arrData = [];
        for(let j = 1; j<= 10; j++){
            arrData.push(j+"X"+i+"="+(j*i));
        }
        console.log(...arrData);
    }

Это напечатает от 1 до 10 таблиц в одной строке.


0

если вы хотите, например, элементы массива журнала консоли без новой строки, вы можете сделать это

const arr = [1,2,3,4,5];

Array.prototype.log = (sep='') => {
    let res = '';
    for(let j=0; j<this.lengthl j++){
        res += this[j];
        res += sep;
    }
    console.log(res);
}

// console loging

arr.log(sep=' '); // result is: 1 2 3 4 5 

-3
// Source code for printing 2d array
window.onload = function () {
    var A = [[1, 2], [3, 4]];
    Print(A);
}

function Print(A) {
    var rows = A.length;
    var cols = A[0].length;
    var line = "";
    for (var r = 0; r < rows; r++) {
        line = "";
        for (var c = 0; c < cols; c++) {
            line += A[r][c] + " ";
        }
        console.log(line);
    }
}

1
A.forEach(row => console.log(row.join(' ')))
vp_arth
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.