Chrome JavaScript-Entwicklerkonsole: Ist es möglich, console.log () ohne Zeilenumbruch aufzurufen?

91

Ich möchte console.log () verwenden, um Nachrichten zu protokollieren, ohne nach jedem Aufruf von console.log () eine neue Zeile anzuhängen. Ist das möglich?

MitchellSalad
quelle
10
War eine der Antworten richtig?
Newenglander
Ich denke, die Antwort von @ minitech ist richtig: Es ist nicht möglich. Die anderen Antworten liefern eine interessante, wenn auch etwas orthogonale Tiefe für unser Verständnis von console.log ().
Dave Land
1
@ DaveLand Ich glaube, es ist durchaus möglich, wenn Sie Ihren eigenen Anzeigepuffer verwalten und diesen Anzeigepuffer durch eine Kombination von console.clear()und, z console.log().
John Weisz
1
@ JohnWeisz: Danke, aber das Löschen der gesamten Konsole für jedes "Inline" -Update ist keine Lösung für etwa 99% der Anwendungen. Habe noch ein Updoot.
Dave Land
@ DaveLand Ja, es ist eher ein Hack - und jetzt, wo ich mich umsah, wurde mir klar, dass es schon einmal vorgeschlagen wurde. In jedem Fall kann es manchmal nützlich sein.
John Weisz

Antworten:

43

Nein, es ist nicht möglich. Sie müssen eine Zeichenfolge beibehalten und verketten, wenn Sie alles in einer Zeile haben möchten, oder Ihre Ausgabe an einer anderen Stelle platzieren (z. B. in einem anderen Fenster).

Ry-
quelle
2
Eigentlich ist es möglich, aber vielleicht nicht für den Gebrauch, den jeder im Sinn hat. In meinem Fall habe ich nur versucht, eine Frage zu drucken, um Eingaben von einem Befehlszeilenterminal zu erhalten. Siehe die Antwort auf diese Frage für die Antwort: stackoverflow.com/questions/26683734/…
deltaray
2
@deltaray readline questionist nicht console.log. Die Frage betrifft auch die Browserkonsole, nicht Node.js.
Ry-
@minitech Sie können den Spread-Operator verwenden, um in einer Zeile zu drucken. siehe im Beispiel jsfiddle.net/imranqau5373/7m65at9L/2
imran khan
@imrankhan: Das war nicht die Frage. Der Spread-Operator fügt hier nichts Neues hinzu, anstatt mehrere Argumente / using zu übergeben apply.
Ry-
39

In NodeJS können Sie process.stdout.write verwenden und bei Bedarf '\ n' hinzufügen.

console.log(msg)ist äquivalent zu process.stdout.write(msg + '\n').

Pablo Yabo
quelle
13
NodeJS ist nicht Chrome. Diese Antwort ist für die Frage "Können Sie console.log ohne Zeilenumbruch verwenden?" Nicht relevant. .
Alex
18

Sie können so viele Dinge argumentseingeben, wie Sie möchten:

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

Sie erhalten die gesamte Ausgabe in einer Zeile mit den Objektreferenzen inline und können dann die Inspektoren von dort aus ablegen.

tkone
quelle
61
Wie beantwortet dies die Frage?
JohnAllen
16
Ich denke, diese Antwort ist nützlich.
12
Das ist nützlich. Obwohl es die Frage nicht beantwortet, bietet es eine Lösung für das, wonach die meisten Menschen suchen würden, wenn sie diese Frage finden.
Sean Lynch
Der Grund, warum jemand ohne neue Zeile drucken möchte, ist, dass die folgende Ausgabe nicht bekannt ist. Oder stellen Sie sich einfach eine "Laderleiste" mit z. B. Punkten vor.
Karl Adler
Die Verwendung mehrerer Argumente unterbricht die Konsole von console.log, da Sie nur innerhalb des ersten Arguments formatieren können.
Qwerty
16

Ja, es ist möglich (siehe Demo unten) - indem Sie Ihre eigene virtuelle Konsole über der nativen Browserkonsole implementieren und dann mit der realen Konsole synchronisieren.

Das ist viel einfacher als es sich anhört:

  1. einen Anzeigepuffer beibehalten (z. B. ein Array von Zeichenfolgen, die jeweils eine Zeile darstellen)
  2. Rufen Sie console.clear()vor dem Schreiben an, um frühere Inhalte zu löschen
  3. Rufen Sie console.log()(oder warnen, Fehler usw.) auf, um die Konsole mit dem Inhalt Ihres Anzeigepuffers zu füllen

Eigentlich mache ich das schon seit einiger Zeit. Eine kurze, rudimentäre Umsetzung der Idee wäre in etwa so, könnte aber dennoch den Konsoleninhalt animieren:

// =================================================
// 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);

Es hat sicherlich seine Nachteile beim Mischen mit direkter Konsoleninteraktion und kann definitiv hässlich aussehen - aber es hat sicherlich seine gültigen Verwendungen, die Sie ohne es nicht erreichen könnten.

John Weisz
quelle
2
Dies ist die beste Antwort hier. Sie können sogar mit max Zeilen angeben, die den Protokollstapel ausreichend kurz halten, damit Sie nicht einen großen Datensatz protokollieren.
Matt Way
12

Die kurze Antwort lautet nein.

Aber

Wenn Ihr Anwendungsfall den Versuch beinhaltet, sich ständig ändernde Daten zu protokollieren und dabei das Aufblähen der Konsole zu vermeiden, besteht eine Möglichkeit, dies (in bestimmten Browsern) zu erreichen, darin, sie console.clear()vor jeder Ausgabe zu verwenden.

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

Beachten Sie, dass dies wahrscheinlich alle anderen Protokollierungsfunktionen Ihrer Anwendung beeinträchtigen würde.

Haftungsausschluss: Ich würde dies als Hack klassifizieren.

Shennan
quelle
3
Sehr viel ein Hack, aber klug. Wenn Sie nachverfolgen, was bereits in der Konsole protokolliert wurde (z. B. durch Verwalten eines virtuellen Puffers), können Sie den Puffer neu erstellen und bei jedem Löschen eine neue Zeichenfolge anhängen.
DanShumway
2

Wenn Sie nur das Drucken in vielen Zeilen beenden möchten, können Sie die Werte gruppieren, wenn Sie nicht möchten, dass sie Ihre gesamte Konsole füllen

PS: - Siehe Browser-Konsole für die Ausgabe

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


console.groupCollapsed('index')

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

console.groupEnd()

console.group

console.groupCollapsed

Code Maniac
quelle
1

Etwas über die @ shennan-Idee:

vp_arth
quelle
1

Sammeln Sie Ihre Ausgabe in einem Array und verwenden Sie dann die Verknüpfungsfunktion mit einem bevorzugten Trennzeichen

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

echo("apple",3)

Überprüfen Sie auch Array.prototype.join () für Details zum Modus

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
Ahmed Younes
quelle
0

Sie können einen Spread-Operator verwenden, um die Ausgabe in einer einzelnen Zeile anzuzeigen. Die neue Funktion von Javascript ES6. siehe unten Beispiel

   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);
    }

Dadurch werden 1 bis 10 Tabellen in einer Zeile gedruckt.

Imran Khan
quelle
0

Wenn Sie beispielsweise Konsolenprotokoll-Array-Elemente ohne Zeilenumbruch möchten, können Sie dies tun

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 
Einige sehen einen Stift Ich sehe eine Harpune
quelle
-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);
    }
}
Ja
quelle
1
A.forEach(row => console.log(row.join(' ')))
vp_arth