Chrome JavaScript geliştirici konsolu: console.log () 'u yeni satır olmadan çağırmak mümkün müdür?


93

Console.log () ' a yapılan her çağrıdan sonra yeni bir satır eklemeden mesajları günlüğe kaydetmek için console.log () kullanmak istiyorum . Mümkün mü?


10
Cevaplardan biri doğru muydu?
newenglander

@ Minitech'in cevabının doğru olduğunu düşünüyorum: bu mümkün değil. Diğer yanıtlar, console.log () anlayışımıza biraz ortogonal derinlik verse de ilginçtir.
Dave Land

1
@DaveLand sanırım öyle mükemmel mümkün kendi görüntülü tampon koruyarak ve kombinasyonu ile gerçek konsola görüntüleyen tampon senkronize ederek console.clear()örn ve console.log().
John Weisz

1
@JohnWeisz: Teşekkürler, ancak her "satır içi" güncelleme için tüm konsolu silmek, uygulamaların yaklaşık% 99'u için bir çözüm değildir. Yine de bir kabarıklık var.
Dave Land

@DaveLand Evet, daha çok bir hack gibi - ve şimdi etrafıma baktığımda, daha önce önerildiğini fark ettim. Her iki durumda da bazen faydalı olabilir.
John Weisz

Yanıtlar:


45

Hayır, mümkün değil. Bir dizeyi tutmanız ve hepsini bir satırda isterseniz birleştirmeniz veya çıktınızı başka bir yere (örneğin, başka bir pencere) koymanız gerekir.


2
Aslında mümkün, ama belki de herkesin aklındaki kullanım için değil. Benim durumumda, bir komut satırı terminalinden girdi almak için bir soru yazdırmaya çalışıyordum. Cevap için bu sorunun cevabına bakın: stackoverflow.com/questions/26683734/…
deltaray

2
@deltaray readline's questiondeğil console.log. Soru ayrıca Node.js ile değil, tarayıcı konsolu ile ilgilidir.
Ry-

@minitech tek satırda yazdırmak için yayma operatörünü kullanabilirsiniz. Örnekte bkz. jsfiddle.net/imranqau5373/7m65at9L/2
imran khan

@imrankhan: Soru bu değildi. Yayılma operatörü, birden çok argüman iletme / kullanma yerine buraya yeni bir şey eklemez apply.
Ry-

40

NodeJS'de process.stdout.write'ı kullanabilir ve isterseniz '\ n' ekleyebilirsiniz.

console.log(msg)eşdeğerdir process.stdout.write(msg + '\n').


15
NodeJS, Chrome değildir . Bu yanıt 'satırsonu olmadan console.log yapabilir misin?' Sorusuyla ilgisizdir. .
Alex

17

Evet, mümkündür (aşağıdaki demoya bakın) - kendi sanal konsolunuzu yerel tarayıcı konsolunun üstüne uygulayıp ardından gerçek konsolla senkronize ederek.

Bu göründüğünden çok daha kolay:

  1. bir görüntüleme tamponu bulundurun (örneğin, her biri bir satırı temsil eden bir dizi dizisi)
  2. console.clear()önceki içeriği silmek için yazmadan önce arayın
  3. console.log()konsolu görüntü arabelleğinizdeki içerikle doldurmak için çağrı (veya uyarı, hata vb.)

Aslında bunu bir süredir yapıyorum. Fikrin kısa, ilkel bir uygulaması aşağıdaki satırlarda bir şey olabilir, ancak yine de konsol içeriğini canlandırabilir:

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

Doğrudan konsol etkileşimi ile karıştırırken sakıncaları vardır ve kesinlikle çirkin görünebilir - ancak kesinlikle onsuz elde edemeyeceğiniz geçerli kullanımları vardır.


2
Buradaki en iyi cevap bu. Günlük yığınını yeterince kısa tutan maksimum satırları bile başlatabilirsiniz, böylece çok büyük bir veri kümesini günlüğe kaydetmezsiniz.
Matt Way

16

İstediğiniz kadar çok şey koyabilirsiniz arguments:

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

Nesne referansları satır içi olarak tüm bu çıktıları tek bir satırda alacaksınız ve ardından denetçilerini oradan bırakabilirsiniz.


62
Bu soruya nasıl cevap veriyor?
JohnAllen

16
Bu cevabın faydalı olduğunu düşünüyorum.

12
Bu kullanışlı. Soruyu cevaplamasa da, çoğu insanın bu soruyu bulduğunda arayacağı şeye bir çözüm sağlıyor.
Sean Lynch

1
Herhangi birinin yeni satır olmadan yazdırmak istemesinin nedeni, aşağıdaki çıktının bilinmemesidir. Veya örneğin noktalar kullanan bir "yükleyici çubuğu" hayal edin.
Karl Adler

Birden çok bağımsız değişken kullanmak, yalnızca ilk bağımsız değişken içinde stil uygulayabileceğiniz için console.log stilini bozar.
Qwerty

12

Kısa cevap hayır.

Fakat

Kullanım durumunuz konsol bloatından kaçınırken sürekli olarak değişen verileri günlüğe kaydetmeyi içeriyorsa, bunu başarmanın bir yolu (belirli tarayıcılarda) console.clear()her çıktıdan önce kullanmak olacaktır .

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

Bunun muhtemelen uygulamanızda gerçekleşen diğer tüm günlük işlevlerini bozacağını unutmayın.

Feragatname: Bunu bir hack olarak sınıflandırırım.


3
Çok hileli ama zekice. Konsola önceden kaydedilenleri takip ettiyseniz (örneğin bir tür sanal arabellek koruyarak), arabelleği yeniden oluşturabilir ve her temizlediğinizde yeni bir dizge ekleyebilirsiniz.
danShumway

2

Birçok satırda yazdırmayı durdurmak için tek amacınız varsa, bunun bir yolu, tüm konsolunuzu doldurmalarını istemiyorsanız değerleri gruplamaktır.

Not: - Çıktı için görüşmek üzere tarayıcı konsolu

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


console.groupCollapsed('index')

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

console.groupEnd()

console.group

console.groupCollapsed


1

@Shennan fikri hakkında bir şey:


1

çıktınızı bir dizide toplayın ve ardından birleştirme işlevini tercih edilen bir ayırıcıyla kullanın

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

echo("apple",3)

mod ayrıntıları için ayrıca Array.prototype.join () 'e bakın

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

Çıktıyı tek satırda görüntülemek için bir yayılma operatörü kullanabilirsiniz. JavaScript ES6'nın yeni özelliği. aşağıdaki örneğe bakın

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

Bu, tek satırda 1 ila 10 tablo yazdıracaktır.


0

Örneğin, satırsonu olmadan konsol günlüğü dizisi öğeleri istiyorsanız, bunu yapabilirsiniz

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.