Я хотел бы использовать console.log() для регистрации сообщений без добавления новой строки после каждого вызова console.log(). Возможно ли это?
Консоль разработчика Chrome JavaScript: можно ли вызвать console.log() без новой строки?
Ответ 1
Нет, это невозможно. Вам нужно будет сохранить строку и объединить, если вы хотите все это в одной строке, или поместите свой вывод в другое место (скажем, в другое окно).
Ответ 2
В NodeJS вы можете использовать process.stdout.write, и вы можете добавить '\n', если хотите.
console.log(msg)
эквивалентен process.stdout.write(msg + '\n')
.
Ответ 3
Вы можете поместить столько вещей в arguments
, сколько хотите:
console.log('hi','these','words','will','be','separated','by','spaces',window,document)
Вы получите все, что выводится на одной строке, с ссылками на объекты inline, и затем вы можете отбросить их инспекторов.
Ответ 4
Короткий ответ - нет.
Но
Если ваш прецедент предполагает попытку записи постоянно изменяющихся данных, избегая при этом консольного раздувания, одним из способов достижения этого (в некоторых браузерах) было бы использовать 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);
Ответ 5
Да, возможно (ознакомьтесь с приведенной ниже демонстрацией) - путем внедрения вашей собственной виртуальной консоли поверх встроенной консоли браузера, а затем синхронизации с реальным.
Это намного проще, чем кажется:
- поддерживать буфер отображения (например, массив строк, представляющих одну строку)
- вызов
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);
Ответ 6
Что-то о идее @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();
Ответ 7
собрать ваш вывод в массив, а затем использовать функцию соединения с предпочтительным разделителем
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
Ответ 8
Вы можете использовать оператор спреда для отображения выходных данных в одной строке. Новая функция 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 таблиц в одну строку.
Ответ 9
Если ваша единственная цель - остановить печать на нескольких строках, один из способов - сгруппировать значения, если вы не хотите, чтобы они заполняли всю консоль.
PS: - Увидимся в консоли браузера для вывода
let arr = new Array(10).fill(0)
console.groupCollapsed('index')
arr.forEach((val,index) => {
console.log(index)
})
console.groupEnd()
Ответ 10
// 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);
}
}