Konsol pengembang JavaScript Chrome: Apakah mungkin untuk memanggil console.log () tanpa baris baru?

93

Saya ingin menggunakan console.log () untuk mencatat pesan tanpa menambahkan baris baru setelah setiap panggilan ke console.log (). Apakah ini mungkin?

MitchellSalad
sumber
10
Apakah salah satu jawabannya benar?
newenglander
Saya pikir jawaban @ minitech benar: itu tidak mungkin. Jawaban lain memberikan kedalaman yang menarik, jika agak ortogonal untuk pemahaman kita tentang console.log ().
Dave Land
1
@DaveLand Saya yakin ini sangat mungkin dengan mempertahankan buffer tampilan Anda sendiri, dan menyinkronkan buffer tampilan itu ke konsol sebenarnya dengan kombinasi console.clear()dan, misalnya console.log().
John Weisz
1
@JohnWeisz: Terima kasih, tetapi menghapus seluruh konsol untuk setiap pembaruan "sebaris" bukanlah solusi untuk sekitar 99% aplikasi. Tetap saja, miliki pembaruan.
Dave Land
@DaveLand Ya, ini lebih seperti peretasan - dan sekarang saya melihat sekeliling, saya menyadari itu telah diusulkan sebelumnya. Apa pun itu, ini terkadang berguna.
John Weisz

Jawaban:

45

Tidak, itu tidak mungkin. Anda harus menyimpan string dan menggabungkan jika Anda ingin semuanya dalam satu baris, atau meletakkan output Anda di tempat lain (katakanlah, jendela lain).

Ry-
sumber
2
Sebenarnya, itu mungkin, tetapi mungkin tidak untuk penggunaan yang semua orang pikirkan. Dalam kasus saya, saya hanya mencoba mencetak pertanyaan untuk mendapatkan masukan dari terminal baris perintah. Lihat jawaban atas pertanyaan ini untuk jawabannya: stackoverflow.com/questions/26683734/…
penundaan
2
@deltaray readline's questiontidak console.log. Pertanyaannya juga tentang konsol browser, bukan Node.js.
Ry-
@minitech Anda dapat menggunakan operator penyebaran untuk mencetak dalam satu baris. lihat di contoh jsfiddle.net/imranqau5373/7m65at9L/2
imran khan
@imrankhan: Bukan itu pertanyaannya. Operator penyebaran tidak menambahkan sesuatu yang baru di sini vs. meneruskan beberapa argumen / penggunaan apply.
Ry-
40

Di NodeJS Anda dapat menggunakan process.stdout.write dan Anda dapat menambahkan '\ n' jika Anda mau.

console.log(msg)setara dengan process.stdout.write(msg + '\n').

Pablo Yabo
sumber
15
NodeJS bukan Chrome. Jawaban ini tidak relevan dengan pertanyaan 'dapatkah Anda console.log tanpa baris baru?' .
Alex
17

Anda dapat memasukkan sebanyak mungkin barang argumentssesuka Anda:

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

Anda akan mendapatkan semua keluaran itu dalam satu baris dengan referensi objek sebaris dan Anda kemudian dapat menurunkan pemeriksa mereka dari sana.

tkone
sumber
62
Bagaimana ini menjawab pertanyaan?
JohnAllen
16
Saya rasa jawaban ini bermanfaat.
12
Ini berguna. Meskipun tidak menjawab pertanyaan, ini memberikan solusi untuk apa yang kebanyakan orang akan cari ketika mereka menemukan pertanyaan ini.
Sean Lynch
1
Alasan mengapa ada yang ingin mencetak tanpa baris baru adalah karena keluaran berikut ini tidak diketahui. Atau bayangkan saja "bilah pemuat" menggunakan misalnya titik.
Karl Adler
Menggunakan beberapa argumen akan merusak gaya console.log karena Anda hanya dapat mengatur gaya dalam argumen pertama.
Qwerty
17

Iya itu mungkin (lihat demo di bawah) - dengan menerapkan konsol virtual Anda sendiri di atas konsol browser asli, lalu menyinkronkannya ke yang asli.

Ini jauh lebih mudah daripada kedengarannya:

  1. memelihara buffer tampilan (misalnya, array string yang masing-masing mewakili satu baris)
  2. panggil console.clear()sebelum menulis untuk menghapus konten sebelumnya
  3. panggil console.log()(atau peringatkan, kesalahan, dll) untuk mengisi konsol dengan konten dari buffer tampilan Anda

Sebenarnya, saya sudah melakukan ini selama beberapa waktu sekarang. Penerapan ide yang singkat dan belum sempurna akan menjadi sesuatu di sepanjang baris berikut, tetapi masih mampu menganimasikan konten konsol:

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

Ini pasti memiliki kekurangan saat mencampurkan dengan interaksi konsol langsung, dan pasti bisa terlihat jelek - tetapi pasti memiliki kegunaan yang valid, yang tidak dapat Anda capai tanpanya.

John Weisz
sumber
2
Ini adalah jawaban terbaik disini. Anda bahkan dapat melakukan init dengan katakanlah garis maks yang membuat tumpukan log cukup pendek, sehingga Anda tidak akan membuat log sekumpulan data yang besar.
Matt Way
12

Jawaban singkatnya tidak.

Tapi

Jika kasus penggunaan Anda melibatkan upaya untuk mencatat data yang terus berubah sambil menghindari pembengkakan konsol, maka salah satu cara untuk mencapai ini (di browser tertentu) adalah dengan menggunakan console.clear()sebelum setiap keluaran.

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

Perhatikan bahwa ini mungkin akan merusak fungsionalitas pencatatan lainnya yang terjadi dalam aplikasi Anda.

Penafian: Saya akan mengklasifikasikan ini sebagai peretasan.

shennan
sumber
3
Sangat banyak hack, tapi pintar. Jika Anda melacak apa yang telah dicatat ke konsol (katakanlah dengan mempertahankan semacam buffer virtual), Anda dapat membangun kembali buffer dan menambahkan string baru setiap kali Anda mengosongkan.
danShumway
2

Jika satu-satunya tujuan Anda untuk berhenti mencetak pada banyak baris, Salah satu caranya adalah mengelompokkan nilai jika Anda tidak ingin mereka mengisi konsol lengkap Anda.

PS: - Sampai jumpa konsol browser untuk output

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


console.groupCollapsed('index')

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

console.groupEnd()

console.group

console.groupCollapsed

Kode Maniak
sumber
1

Sesuatu tentang ide @shennan:

vp_arth
sumber
1

kumpulkan output Anda dalam array dan kemudian gunakan fungsi gabung dengan pemisah pilihan

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

echo("apple",3)

periksa juga Array.prototype.join () untuk detail 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
sumber
0

Anda dapat menggunakan operator sebaran untuk menampilkan keluaran dalam satu baris. Fitur baru javascript ES6. lihat contoh di bawah ini

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

Itu akan mencetak 1 hingga 10 tabel dalam satu baris.

imran khan
sumber
0

jika Anda ingin, misalnya, elemen array log konsol tanpa baris baru, Anda dapat melakukannya seperti ini

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 
beberapa melihat pena saya melihat tombak
sumber
-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
sumber
1
A.forEach(row => console.log(row.join(' ')))
vp_arth