Console développeur JavaScript Chrome: est-il possible d'appeler console.log () sans nouvelle ligne?

91

Je voudrais utiliser console.log () pour enregistrer des messages sans ajouter de nouvelle ligne après chaque appel à console.log (). Est-ce possible?

MitchellSalade
la source
10
L'une des réponses était-elle correcte?
newenglander
Je pense que la réponse de @ minitech est correcte: ce n'est pas possible. Les autres réponses fournissent une profondeur intéressante, quoique quelque peu orthogonale, à notre compréhension de console.log ().
Dave Land
1
@DaveLand Je pense que c'est parfaitement possible en conservant votre propre tampon d'affichage et en synchronisant ce tampon d'affichage avec la console réelle par une combinaison de console.clear()et, par exemple console.log().
John Weisz
1
@JohnWeisz: Merci, mais effacer toute la console pour chaque mise à jour "en ligne" n'est pas une solution pour environ 99% des applications. Toujours, ayez un updoot.
Dave Land
@DaveLand Oui, c'est plus comme un hack - et maintenant que j'ai regardé autour de moi, j'ai réalisé que cela avait déjà été proposé. Dans tous les cas, cela peut parfois être utile.
John Weisz

Réponses:

43

Non, ce n'est pas possible. Vous devrez conserver une chaîne et concaténer si vous voulez tout sur une seule ligne, ou placer votre sortie ailleurs (par exemple, une autre fenêtre).

Ry-
la source
2
En fait, c'est possible, mais peut-être pas pour l'usage que tout le monde a en tête. Dans mon cas, j'essayais juste d'imprimer une question pour obtenir une entrée d'un terminal de ligne de commande. Voir la réponse à cette question pour la réponse: stackoverflow.com/questions/26683734/…
deltaray
2
@deltaray readline ne l' questionest pas console.log. La question concerne également la console du navigateur, pas Node.js.
Ry-
@minitech vous pouvez utiliser l'opérateur d'étalement pour imprimer en une seule ligne. voir dans l'exemple jsfiddle.net/imranqau5373/7m65at9L/2
imran khan
@imrankhan: Ce n'était pas la question. L'opérateur de propagation n'ajoute rien de nouveau ici par rapport au passage de plusieurs arguments / utilisation apply.
Ry-
40

Dans NodeJS, vous pouvez utiliser process.stdout.write et vous pouvez ajouter '\ n' si vous le souhaitez.

console.log(msg)équivaut à process.stdout.write(msg + '\n').

Pablo Yabo
la source
13
NodeJS n'est pas Chrome. Cette réponse n'a aucun rapport avec la question «pouvez-vous console.log sans nouvelle ligne?» .
Alex
18

Vous pouvez mettre autant de choses argumentsque vous le souhaitez:

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

Vous obtiendrez toute cette sortie sur une ligne avec les références d'objet en ligne et vous pourrez ensuite déposer leurs inspecteurs à partir de là.

tkone
la source
61
Comment cela répond-il à la question?
JohnAllen
16
Je pense que cette réponse est utile.
12
C'est utile. Même si cela ne répond pas à la question, cela fournit une solution à ce que la plupart des gens rechercheraient lorsqu'ils trouveraient cette question.
Sean Lynch
La raison pour laquelle n'importe qui voudrait imprimer sans nouvelle ligne est que la sortie suivante n'est pas connue. Ou imaginez simplement une "barre de chargement" utilisant par exemple des points.
Karl Adler
L'utilisation de plusieurs arguments interrompt le style console.log car vous ne pouvez appliquer le style que dans le premier argument.
Qwerty
17

Oui c'est possible (consultez la démo ci-dessous) - en implémentant votre propre console virtuelle au-dessus de la console native du navigateur, puis en la synchronisant avec la vraie.

C'est beaucoup plus facile qu'il n'y paraît:

  1. maintenir un tampon d'affichage (par exemple un tableau de chaînes représentant une ligne chacune)
  2. appeler console.clear()avant d'écrire pour effacer tout contenu précédent
  3. appeler console.log()(ou avertir, erreur, etc.) pour remplir la console avec le contenu de votre tampon d'affichage

En fait, je fais ça depuis un certain temps maintenant. Une implémentation courte et rudimentaire de l'idée serait quelque chose du genre suivant, mais toujours capable d' animer le contenu de la 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);

Il a certainement ses inconvénients lors du mixage avec une interaction directe avec la console, et peut certainement paraître moche - mais il a certainement ses utilisations valables, que vous ne pourriez pas réaliser sans lui.

John Weisz
la source
2
C'est la meilleure réponse ici. Vous pouvez même initier avec, par exemple, des lignes max qui gardent la pile de journaux suffisamment courte, de sorte que vous ne finissiez pas par enregistrer un énorme ensemble de données.
Matt Way
12

La réponse courte est non.

Mais

Si votre cas d'utilisation consiste à tenter de consigner des données en perpétuel changement tout en évitant le gonflement de la console, une façon d'y parvenir (dans certains navigateurs) serait de l'utiliser console.clear()avant chaque sortie.

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

Notez que cela interromprait probablement toute autre fonctionnalité de journalisation qui se déroulait dans votre application.

Avertissement: je classerais cela comme un hack.

Shennan
la source
3
C'est vraiment un hack, mais intelligent. Si vous avez suivi ce qui a déjà été enregistré sur la console (par exemple en conservant une sorte de tampon virtuel), vous pouvez reconstruire le tampon et ajouter une nouvelle chaîne à chaque fois que vous effacez.
danShumway
2

Si votre seul but est d'arrêter l'impression sur plusieurs lignes, une façon est de regrouper les valeurs si vous ne voulez pas qu'elles remplissent votre console complète

PS: - Voir la console de votre navigateur pour la sortie

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
la source
1

Quelque chose à propos de l'idée @shennan:

vp_arth
la source
1

collectez votre sortie dans un tableau, puis utilisez la fonction de jointure avec un séparateur préféré

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

echo("apple",3)

vérifiez également Array.prototype.join () pour les détails du mode

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
la source
0

Vous pouvez utiliser un opérateur d'étalement pour afficher la sortie sur une seule ligne. La nouvelle fonctionnalité de javascript ES6. voir l'exemple ci-dessous

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

Cela imprimera 1 à 10 tableaux en une seule ligne.

Imran Khan
la source
0

si vous voulez par exemple des éléments de tableau de journal de console sans nouvelle ligne, vous pouvez faire comme ceci

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 
certains voient un stylo je vois un harpon
la source
-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);
    }
}
Oui
la source
1
A.forEach(row => console.log(row.join(' ')))
vp_arth