Tôi muốn sử dụng console.log () để ghi nhật ký tin nhắn mà không cần thêm dòng mới sau mỗi lần gọi tới console.log (). Điều này có khả thi không?
console.clear()
và, ví dụ console.log()
.
Tôi muốn sử dụng console.log () để ghi nhật ký tin nhắn mà không cần thêm dòng mới sau mỗi lần gọi tới console.log (). Điều này có khả thi không?
console.clear()
và, ví dụ console.log()
.
Câu trả lời:
Không, không thể. Bạn sẽ phải giữ một chuỗi và nối nếu bạn muốn tất cả trong một dòng hoặc đặt đầu ra của bạn ở nơi khác (giả sử, một cửa sổ khác).
question
thì không console.log
. Câu hỏi cũng là về bảng điều khiển trình duyệt, không phải Node.js.
apply
.
Trong NodeJS, bạn có thể sử dụng process.stdout.write và bạn có thể thêm '\ n' nếu muốn.
console.log(msg)
tương đương với process.stdout.write(msg + '\n')
.
Bạn có thể đặt bao nhiêu thứ arguments
tùy thích:
console.log('hi','these','words','will','be','separated','by','spaces',window,document)
Bạn sẽ nhận được tất cả đầu ra đó trên một dòng với các tham chiếu đối tượng nội tuyến và sau đó bạn có thể thả xuống trình kiểm tra của chúng từ đó.
Có, hoàn toàn có thể (xem bản demo bên dưới) - bằng cách triển khai bảng điều khiển ảo của riêng bạn trên bảng điều khiển trình duyệt gốc, sau đó đồng bộ hóa nó với bảng điều khiển thực.
Điều này dễ dàng hơn nhiều so với âm thanh:
console.clear()
trước khi viết để xóa mọi nội dung trước đóconsole.log()
(hoặc cảnh báo, lỗi, v.v.) để điền vào bảng điều khiển với nội dung từ bộ đệm hiển thị của bạnTrên thực tế, tôi đã làm điều này một thời gian. Một triển khai ngắn gọn, thô sơ của ý tưởng sẽ là một cái gì đó dọc theo các dòng sau, nhưng vẫn có khả năng làm sinh động nội dung bảng điều khiển:
// =================================================
// 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);
Nó chắc chắn có nhược điểm của nó khi trộn với tương tác trực tiếp với bảng điều khiển và chắc chắn có thể trông xấu xí - nhưng nó chắc chắn có những công dụng hợp lệ mà bạn không thể đạt được nếu không có nó.
Câu trả lời ngắn gọn là không.
Nhưng
Nếu trường hợp sử dụng của bạn liên quan đến việc cố gắng ghi nhật ký dữ liệu thay đổi vĩnh viễn trong khi tránh giao diện điều khiển-bloat, thì một cách để đạt được điều này (trong các trình duyệt nhất định) sẽ là sử dụng console.clear()
trước mỗi đầu ra.
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);
Lưu ý rằng điều này có thể sẽ phá vỡ bất kỳ chức năng ghi nhật ký nào khác đang diễn ra trong ứng dụng của bạn.
Tuyên bố từ chối trách nhiệm: Tôi sẽ coi đây là một vụ hack.
Nếu mục đích duy nhất của bạn là dừng in trên nhiều dòng, một cách là nhóm các giá trị nếu bạn không muốn chúng lấp đầy bảng điều khiển hoàn chỉnh của mình
Tái bút: - Hẹn gặp lại bảng điều khiển trình duyệt cho đầu ra
let arr = new Array(10).fill(0)
console.groupCollapsed('index')
arr.forEach((val,index) => {
console.log(index)
})
console.groupEnd()
Đôi điều về ý tưởng @shennan:
thu thập đầu ra của bạn trong một mảng và sau đó sử dụng hàm nối với dấu phân tách ưu tiên
function echo(name, num){
var ar= [];
for(var i =0;i<num;i++){
ar.push(name);
}
console.log(ar.join(', '));
}
echo("apple",3)
cũng kiểm tra Array.prototype.join () để biết chi tiết về chế độ
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
Bạn có thể sử dụng toán tử chênh lệch để hiển thị đầu ra trong một dòng. Tính năng mới của javascript ES6. xem ví dụ dưới đây
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);
}
Điều đó sẽ in từ 1 đến 10 bảng trong một dòng.
nếu bạn muốn các phần tử mảng bản ghi bảng điều khiển chẳng hạn mà không có dòng mới, bạn có thể làm như thế này
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(' ')))