Ответ 1
Нет, это невозможно. Вам нужно будет сохранить строку и объединить, если вы хотите все это в одной строке, или поместите свой вывод в другое место (скажем, в другое окно).
Я хотел бы использовать console.log() для регистрации сообщений без добавления новой строки после каждого вызова console.log(). Возможно ли это?
Нет, это невозможно. Вам нужно будет сохранить строку и объединить, если вы хотите все это в одной строке, или поместите свой вывод в другое место (скажем, в другое окно).
В NodeJS вы можете использовать process.stdout.write, и вы можете добавить '\n', если хотите.
console.log(msg)
эквивалентен process.stdout.write(msg + '\n')
.
Вы можете поместить столько вещей в arguments
, сколько хотите:
console.log('hi','these','words','will','be','separated','by','spaces',window,document)
Вы получите все, что выводится на одной строке, с ссылками на объекты inline, и затем вы можете отбросить их инспекторов.
Короткий ответ - нет.
Но
Если ваш прецедент предполагает попытку записи постоянно изменяющихся данных, избегая при этом консольного раздувания, одним из способов достижения этого (в некоторых браузерах) было бы использовать 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);
Да, возможно (ознакомьтесь с приведенной ниже демонстрацией) - путем внедрения вашей собственной виртуальной консоли поверх встроенной консоли браузера, а затем синхронизации с реальным.
Это намного проще, чем кажется:
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);
Что-то о идее @shennan:
function init(poolSize) {
var pool = [];
console._log = console.log;
console.log = function log() {
pool.push(arguments);
while (pool.length > poolSize) pool.shift();
draw();
}
console.toLast = function toLast() {
while (pool.length > poolSize) pool.shift();
var last = pool.pop() || [];
for (var a = 0; a < arguments.length; a++) {
last[last.length++] = arguments[a];
}
pool.push(last);
draw();
}
function draw() {
console.clear();
for(var i = 0; i < pool.length; i++)
console._log.apply(console, pool[i]);
}
}
function restore() {
console.log = console._log;
delete console._log;
delete console.toLast;
}
init(3);
console.log(1);
console.log(2);
console.log(3);
console.log(4); // 1 will disappeared here
console.toLast(5); // 5 will go to row with 4
restore();
собрать ваш вывод в массив, а затем использовать функцию соединения с предпочтительным разделителем
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
Вы можете использовать оператор спреда для отображения выходных данных в одной строке. Новая функция javascript ES6. см. пример ниже
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);
}
Это напечатает от 1 до 10 таблиц в одну строку.
Если ваша единственная цель - остановить печать на нескольких строках, один из способов - сгруппировать значения, если вы не хотите, чтобы они заполняли всю консоль.
PS: - Увидимся в консоли браузера для вывода
let arr = new Array(10).fill(0)
console.groupCollapsed('index')
arr.forEach((val,index) => {
console.log(index)
})
console.groupEnd()
// 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);
}
}