Consola de desarrollador de JavaScript de Chrome: ¿Es posible llamar a console.log () sin una nueva línea?

91

Me gustaría usar console.log () para registrar mensajes sin agregar una nueva línea después de cada llamada a console.log (). es posible?

Ensalada Mitchell
fuente
10
¿Alguna de las respuestas fue correcta?
Newenglander
Creo que la respuesta de @ minitech es correcta: no es posible. Las otras respuestas proporcionan una profundidad interesante, aunque algo ortogonal, a nuestra comprensión de console.log ().
Dave Land
1
@DaveLand Creo que es perfectamente posible manteniendo su propio búfer de pantalla y sincronizando ese búfer de pantalla con la consola real mediante una combinación de console.clear()y, por ejemplo console.log().
John Weisz
1
@JohnWeisz: Gracias, pero limpiar toda la consola para cada actualización "en línea" no es una solución para aproximadamente el 99% de las aplicaciones. Aún así, tenga un updoot.
Dave Land
@DaveLand Sí, es más como un truco, y ahora que miré a mi alrededor, me di cuenta de que se había propuesto antes. De cualquier manera, a veces puede resultar útil.
John Weisz

Respuestas:

43

No, no es posible. Tendrá que mantener una cadena y concatenar si lo desea todo en una línea, o poner su salida en otro lugar (digamos, otra ventana).

Ry-
fuente
2
De hecho, es posible, pero quizás no para el uso que todos tienen en mente. En mi caso, solo estaba tratando de imprimir una pregunta para obtener información de una terminal de línea de comandos. Consulte la respuesta a esta pregunta para obtener la respuesta: stackoverflow.com/questions/26683734/…
deltaray
2
@deltaray readline questionno lo es console.log. La pregunta también es sobre la consola del navegador, no sobre Node.js.
Ry-
@minitech puede usar el operador de extensión para imprimir en una línea. ver en el ejemplo jsfiddle.net/imranqau5373/7m65at9L/2
khan
@imrankhan: Esa no es la pregunta. El operador de propagación no agrega nada nuevo aquí en lugar de pasar múltiples argumentos / usar apply.
Ry-
40

En NodeJS puede usar process.stdout.write y puede agregar '\ n' si lo desea.

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

Pablo Yabo
fuente
13
NodeJS no es Chrome. Esta respuesta es irrelevante para la pregunta "¿puedes console.log sin una nueva línea?" .
Alex
18

Puedes poner tantas cosas argumentscomo quieras:

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

Obtendrá toda esa salida en una línea con las referencias de objeto en línea y luego puede desplegar sus inspectores desde allí.

tkone
fuente
61
¿Cómo responde esto a la pregunta?
JohnAllen
16
Creo que esta respuesta es útil.
12
Esto es útil. Aunque no responde a la pregunta, proporciona una solución a lo que la mayoría de las personas buscarían cuando se encuentran con esta pregunta.
Sean Lynch
La razón por la que a cualquiera le gustaría imprimir sin una nueva línea es que no se conoce la siguiente salida. O simplemente imagina una "barra de carga" usando, por ejemplo, puntos.
Karl Adler
El uso de varios argumentos rompe el estilo de console.log, ya que solo puedes diseñar dentro del primer argumento.
Qwerty
16

Sí, es posible (consulte la demostración a continuación): implementando su propia consola virtual en la parte superior de la consola del navegador nativo y luego sincronizándola con la real.

Esto es mucho más fácil de lo que parece:

  1. mantener un búfer de visualización (por ejemplo, una matriz de cadenas que representan una línea cada una)
  2. llamar console.clear()antes de escribir para borrar cualquier contenido anterior
  3. llamar console.log()(o advertir, error, etc.) para llenar la consola con el contenido de su búfer de pantalla

De hecho, he estado haciendo esto por algún tiempo. Una implementación breve y rudimentaria de la idea sería algo en la siguiente línea, pero aún capaz de animar el contenido de la consola:

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

Seguro que tiene sus inconvenientes cuando se mezcla con la interacción directa de la consola, y definitivamente puede verse feo, pero ciertamente tiene sus usos válidos, que no podrías lograr sin él.

John Weisz
fuente
2
Esta es la mejor respuesta aquí. Incluso puede iniciar con, por ejemplo, líneas máximas que mantienen la pila de registros lo suficientemente corta, de modo que no termine registrando un gran conjunto de datos.
Matt Way
12

La respuesta corta es no.

Pero

Si su caso de uso implica intentar registrar datos que cambian perpetuamente mientras evita la sobrecarga de la consola, entonces una forma de lograrlo (en ciertos navegadores) sería usar console.clear()antes de cada salida.

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

Tenga en cuenta que esto probablemente interrumpiría cualquier otra funcionalidad de registro que estuviera teniendo lugar dentro de su aplicación.

Descargo de responsabilidad: clasificaría esto como un truco.

shennan
fuente
3
Mucho truco, pero inteligente. Si realizó un seguimiento de lo que ya se registró en la consola (por ejemplo, manteniendo algún tipo de búfer virtual), podría reconstruir el búfer y agregar una nueva cadena cada vez que lo borre.
danShumway
2

Si su único propósito es dejar de imprimir en muchas líneas, una forma es agrupar los valores si no desea que llenen su consola completa

PD: - Ver la consola del navegador para ver la salida

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
fuente
1

Algo sobre la idea de @shennan:

vp_arth
fuente
1

recopile su salida en una matriz y luego use la función de unión con un separador preferido

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

echo("apple",3)

verifique también Array.prototype.join () para detalles del modo

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
fuente
0

Puede utilizar un operador de extensión para mostrar la salida en una sola línea. La nueva función de javascript ES6. ver el siguiente ejemplo

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

Eso imprimirá de 1 a 10 tablas en una sola línea.

Imran Khan
fuente
0

si desea, por ejemplo, elementos de matriz de registro de la consola sin una nueva línea, puede hacer esto

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 
algunos ven un bolígrafo yo veo un arpón
fuente
-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);
    }
}
Yas
fuente
1
A.forEach(row => console.log(row.join(' ')))
vp_arth