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


91

Я хотів би використовувати console.log () для реєстрації повідомлень без додавання нового рядка після кожного виклику console.log (). Чи можливо це?


10
Чи одна з відповідей була правильною?
newenglander

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

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

1
@JohnWeisz: Дякую, але стирання всієї консолі для кожного "вбудованого" оновлення не є рішенням для приблизно 99% програм. Тим не менш, є оновлення.
Дейв Ленд

@DaveLand Так, це більше схоже на хакерство - і тепер, коли я озирнувся, зрозумів, що це було запропоновано раніше. У будь-якому випадку, це може бути корисним часом.
Джон Вайс

Відповіді:


43

Ні, це неможливо. Вам потрібно буде зберегти рядок і об’єднати, якщо ви хочете, щоб все це було в одному рядку, або розмістити результат у іншому місці (скажімо, в іншому вікні).


2
Насправді це можливо, але, можливо, не для того, щоб усі мали на увазі. У моєму випадку я просто намагався надрукувати питання, щоб отримати вхідні дані з терміналу командного рядка. Дивіться відповідь на це питання для відповіді: stackoverflow.com/questions/26683734 / ...
deltaray

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

@minitech ви можете використовувати оператор поширення для друку в один рядок. див. у прикладі jsfiddle.net/imranqau5373/7m65at9L/2
хан

@imrankhan: Не в цьому було питання. Оператор поширення не додає тут нічого нового порівняно з передачею кількох аргументів / використанням apply.
Ry-

40

У NodeJS ви можете використовувати process.stdout.write і можете додати '\ n', якщо хочете.

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


13
NodeJS - це не Chrome. Ця відповідь не має відношення до запитання "чи можете ви console.log без нового рядка?" .
Олексій

18

Ви можете вкласти стільки речей, argumentsскільки завгодно:

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

Ви отримаєте всі ці результати в одному рядку з вбудованими посиланнями на об'єкти, а потім зможете викинути їх інспектори звідти.


61
Як це відповідає на питання?
JohnAllen

16
Я вважаю, що ця відповідь корисна.

12
Це корисно. Незважаючи на те, що він не відповідає на питання, він надає рішення того, що більшість людей шукали б, коли знайшли це питання.
Шон Лінч,

Причина, по якій хтось хотів би друкувати без нового рядка, полягає в тому, що наступні результати невідомі. Або просто уявіть собі "панель завантажувача", використовуючи, наприклад, крапки.
Карл Адлер

Використання декількох аргументів порушує стиль console.log, оскільки ви можете стилювати лише в межах першого аргументу.
Qwerty

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

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.