我想使用console.log()记录消息,而不必在每次调用console.log()之后添加新行。这可能吗?
我想使用console.log()记录消息,而不必在每次调用console.log()之后添加新行。这可能吗?
Answers:
不,不可能。如果您希望将所有内容都放在一行中,则必须保留一个字符串并进行连接,或者将输出放置在其他位置(例如,另一个窗口)。
question
不是console.log
。问题还与浏览器控制台有关,而不是Node.js。
apply
。
您可以根据需要放入尽可能多的东西arguments
:
console.log('hi','these','words','will','be','separated','by','spaces',window,document)
您将在一行内获得所有输出,而对象引用为内联,然后可以从此处下拉其检查器。
是的,有可能(请查看下面的演示)-通过在本机浏览器控制台之上实现自己的虚拟控制台,然后将其同步到真实的控制台。
这比听起来容易得多:
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);
当与直接控制台交互混合使用时,它肯定有其缺点,并且看起来确实很丑陋-但它确实具有其有效的用途,没有它,您将无法实现。
最简洁的答案是不。
但
如果您的用例涉及尝试记录永久更改的数据同时避免控制台膨胀,那么一种实现此目的的方法(在某些浏览器中)将是使用 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);
请注意,这可能会破坏应用程序中发生的任何其他日志记录功能。
免责声明:我将其归类为黑客。
如果您唯一的目的是停止在多行上打印,则一种方法是将值分组,如果您不希望它们填满整个控制台
PS:-请参见浏览器控制台的输出
let arr = new Array(10).fill(0)
console.groupCollapsed('index')
arr.forEach((val,index) => {
console.log(index)
})
console.groupEnd()
将输出收集到数组中,然后将join函数与首选分隔符一起使用
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(' ')))