Я хотів би використовувати console.log () для реєстрації повідомлень без додавання нового рядка після кожного виклику console.log (). Чи можливо це?
console.clear()
та, наприклад console.log()
.
Я хотів би використовувати console.log () для реєстрації повідомлень без додавання нового рядка після кожного виклику console.log (). Чи можливо це?
console.clear()
та, наприклад console.log()
.
Відповіді:
Ні, це неможливо. Вам потрібно буде зберегти рядок і об’єднати, якщо ви хочете, щоб все це було в одному рядку, або розмістити результат у іншому місці (скажімо, в іншому вікні).
question
є console.log
. Питання також стосується консолі браузера, а не Node.js.
apply
.
У 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)
Ви отримаєте всі ці результати в одному рядку з вбудованими посиланнями на об'єкти, а потім зможете викинути їх інспектори звідти.
Так, це можливо (перегляньте демонстрацію нижче) - впровадивши власну віртуальну консоль поверх консолі власного браузера, а потім синхронізуючи її з реальною.
Це набагато простіше, ніж здається:
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()
Щось про ідею @shennan:
зберіть вихідні дані в масив, а потім скористайтеся функцією об'єднання з кращим роздільником
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 в один рядок.
якщо ви хочете, наприклад, елементи масиву журналу консолі без нового рядка, ви можете зробити це так
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(' ')))