console.log()を呼び出すたびに改行を追加せずに console.log()を使用してメッセージをログに記録したいと思います。これは可能ですか?
console.clear()
console.log()
console.log()を呼び出すたびに改行を追加せずに console.log()を使用してメッセージをログに記録したいと思います。これは可能ですか?
console.clear()
console.log()
回答:
いいえ、それは不可能です。すべてを1行にしたい場合は、文字列を保持して連結するか、出力を別の場所(たとえば、別のウィンドウ)に置く必要があります。
question
はありませんconsole.log
。問題は、Node.jsではなく、ブラウザコンソールに関するものでもあります。
apply
。
あなたはarguments
好きなだけ多くのものを入れることができます:
console.log('hi','these','words','will','be','separated','by','spaces',window,document)
オブジェクト参照がインラインで1行にすべての出力が表示され、そこからインスペクターをドロップダウンできます。
はい、可能です(以下のデモをご覧ください)。ネイティブのブラウザコンソールの上に独自の仮想コンソールを実装し、それを実際のコンソールに同期させることで可能です。
これは思ったよりずっと簡単です:
console.clear()
以前のコンテンツを消去するために書き込む前に呼び出しますconsole.log()
(または警告、エラーなど)して、ディスプレイバッファーの内容をコンソールに入力します。実際、私はこれをしばらくの間行ってきました。アイデアの短い初歩的な実装は、次のようなものですが、コンソールのコンテンツをアニメーション化することができます。
// =================================================
// 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);
確かに、コンソールの直接操作と組み合わせる場合には欠点があり、見苦しく見える可能性があります-確かに、有効な用途があり、それなしでは達成できませんでした。
短い答えはノーです。
だが
コンソールの膨張を回避しながら、永続的に変化するデータをログに記録しようとするユースケースの場合、これを達成する1つの方法は(特定のブラウザーで)、console.clear()
各出力の前に使用することです。
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);
これはおそらく、アプリケーション内で実行されていた他のロギング機能を破壊することに注意してください。
免責事項:私はこれをハックとして分類します。
多くの行で印刷を停止する唯一の目的が1つの方法である場合、コンソール全体に値を表示させたくない場合は値をグループ化することです
PS:-ブラウザコンソールで出力を確認してください
let arr = new Array(10).fill(0)
console.groupCollapsed('index')
arr.forEach((val,index) => {
console.log(index)
})
console.groupEnd()
@シェナンのアイデアについての何か:
出力を配列に収集してから、優先セパレーターを使用して結合関数を使用します
function echo(name, num){
var ar= [];
for(var i =0;i<num;i++){
ar.push(name);
}
console.log(ar.join(', '));
}
echo("apple",3)
モードの詳細については、Array.prototype.join()も確認してください
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
たとえば、改行なしのコンソールログ配列要素が必要な場合は、次のようにすることができます
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
// 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);
}
}
A.forEach(row => console.log(row.join(' ')))