Console per sviluppatori JavaScript di Chrome: è possibile chiamare console.log () senza una nuova riga?


91

Vorrei utilizzare console.log () per registrare i messaggi senza aggiungere una nuova riga dopo ogni chiamata a console.log (). È possibile?


10
Una delle risposte era corretta?
newenglander

Penso che la risposta di @ minitech sia corretta: non è possibile. Le altre risposte forniscono una profondità interessante, anche se in qualche modo ortogonale, alla nostra comprensione di console.log ().
Dave Land,

1
@DaveLand Credo che sia perfettamente possibile mantenere il proprio buffer di visualizzazione e sincronizzare quel buffer di visualizzazione con la console effettiva mediante una combinazione di console.clear()e, ad es console.log().
John Weisz

1
@JohnWeisz: Grazie, ma cancellare l'intera console per ogni aggiornamento "in linea" non è una soluzione per circa il 99% delle applicazioni. Tuttavia, fai un salto di qualità.
Dave Land

@DaveLand Sì, è più come un hack - e ora che mi sono guardato intorno, ho capito che era stato proposto prima. In ogni caso, a volte può essere utile.
John Weisz

Risposte:


43

No, non è possibile. Dovrai mantenere una stringa e concatenare se vuoi tutto in una riga, o mettere il tuo output altrove (diciamo, un'altra finestra).


2
In realtà è possibile, ma forse non per l'uso che tutti hanno in mente. Nel mio caso, stavo solo cercando di stampare una domanda per ottenere input da un terminale della riga di comando. Vedere la risposta a questa domanda la risposta: stackoverflow.com/questions/26683734/...
deltaray

2
@deltaray readline questionnon lo è console.log. La domanda riguarda anche la console del browser, non Node.js.
Ry-

@minitech puoi usare l'operatore di diffusione per stampare in una riga. vedi nell'esempio jsfiddle.net/imranqau5373/7m65at9L/2
imran khan

@imrankhan: Non è questa la domanda. L'operatore spread non aggiunge nulla di nuovo qui rispetto al passaggio di più argomenti / utilizzo apply.
Ry-

40

In NodeJS puoi usare process.stdout.write e puoi aggiungere '\ n' se vuoi.

console.log(msg)è equivalente a process.stdout.write(msg + '\n').


13
NodeJS non è Chrome. Questa risposta è irrilevante per la domanda "puoi console.log senza una nuova riga?" .
Alex

18

Puoi inserire tutte le cose argumentsche desideri:

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

Otterrai tutto l'output su una riga con i riferimenti all'oggetto inline e potrai quindi visualizzare i loro ispettori da lì.


61
Come risponde questo alla domanda?
JohnAllen

16
Penso che questa risposta sia utile.

12
Questo è utile. Anche se non risponde alla domanda, fornisce una soluzione a ciò che la maggior parte delle persone cercherebbe quando troverà questa domanda.
Sean Lynch

Il motivo per cui qualcuno vorrebbe stampare senza una nuova riga è che il seguente output non è noto. O immagina semplicemente una "barra di caricamento" utilizzando ad es. I punti.
Karl Adler

L'uso di più argomenti interrompe lo stile console.log poiché è possibile applicare lo stile solo all'interno del primo argomento.
Qwerty

17

Si è possibile (controlla la demo di seguito), implementando la tua console virtuale sulla console del browser nativa, quindi sincronizzandola con quella reale.

Questo è molto più facile di quanto sembri:

  1. mantenere un buffer di visualizzazione (ad esempio un array di stringhe che rappresentano una riga ciascuna)
  2. chiamare console.clear()prima di scrivere per cancellare eventuali contenuti precedenti
  3. call console.log()(o warn, error, ecc.) per riempire la console con i contenuti dal tuo buffer di visualizzazione

In realtà, lo sto facendo da un po 'di tempo. Una breve e rudimentale implementazione dell'idea sarebbe qualcosa del genere, ma comunque in grado di animare i contenuti della console:

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

Sicuramente ha i suoi svantaggi quando si mescola con l'interazione diretta della console e può sicuramente sembrare brutto, ma ha certamente i suoi usi validi, che non potresti ottenere senza di esso.


2
Questa è la migliore risposta qui. Puoi anche inizializzare con diciamo max righe che mantengono lo stack di log sufficientemente breve, in modo da non finire per registrare un enorme set di dati.
Matt Way

12

La risposta breve è no.

Ma

Se il tuo caso d'uso prevede il tentativo di registrare dati in continua evoluzione evitando il sovraccarico della console, un modo per ottenere ciò (in alcuni browser) sarebbe quello di utilizzare console.clear()prima di ogni output.

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

Si noti che questo probabilmente interromperà qualsiasi altra funzionalità di registrazione che si stava verificando all'interno dell'applicazione.

Disclaimer: lo classificherei come un hack.


3
Molto un trucco, ma intelligente. Se hai tracciato ciò che è già stato registrato nella console (ad esempio mantenendo una sorta di buffer virtuale), potresti ricostruire il buffer e aggiungere una nuova stringa ogni volta che lo cancelli.
danShumway

2

Se il tuo unico scopo è interrompere la stampa su molte righe, un modo è raggruppare i valori se non vuoi che riempiano la tua console completa

PS: - Ci vediamo nella console del browser per l'output

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


console.groupCollapsed('index')

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

console.groupEnd()

console.group

console.groupCollapsed


1

Qualcosa sull'idea di @shennan:


1

raccogliere l'output in un array e quindi utilizzare la funzione di unione con un separatore preferito

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

echo("apple",3)

controlla anche Array.prototype.join () per i dettagli sulla modalità

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

È possibile utilizzare un operatore di diffusione per visualizzare l'output su un'unica riga. La nuova funzionalità di javascript ES6. vedi esempio sotto

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

Ciò stamperà da 1 a 10 tabelle in una sola riga.


0

se vuoi, ad esempio, gli elementi dell'array di log della console senza una nuova riga, puoi fare così

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.