ক্রোম জাভাস্ক্রিপ্ট বিকাশকারী কনসোল: একটি নতুন লাইন ছাড়া কনসোল.লগ () কল করা কি সম্ভব?


93

কনসোল.লগ () এ প্রতিটি কল করার পরে কোনও নতুন লাইন যুক্ত না করে বার্তা লগ করতে আমি কনসোল.লগ () ব্যবহার করতে চাই । এটা কি সম্ভব?


10
উত্তরগুলির একটি সঠিক ছিল?
newenglander

আমি মনে করি @ মিনিটেকের উত্তর সঠিক: এটি সম্ভব নয়। অন্যান্য উত্তরগুলি আকর্ষণীয় সরবরাহ করে, যদি কনসোল.লগ () এর আমাদের বোঝার জন্য কিছুটা অরথোগোনাল গভীরতা থাকে।
ডেভ ল্যান্ড

4
@DaveLand আমি বিশ্বাস করি এটা পুরোপুরি সম্ভব আপনার নিজের প্রদর্শন বাফার বজায় রাখার, এবং একটি সমন্বয় অনুসারে প্রকৃত কনসোলে যে প্রদর্শন বাফার সিঙ্ক করে console.clear()যেমন এবং console.log()
জন ওয়েইজ

4
@ জোহানওয়েজ: ধন্যবাদ, তবে প্রতিটি "ইনলাইন" আপডেটের জন্য সম্পূর্ণ কনসোল মুছে ফেলা প্রায় 99% অ্যাপ্লিকেশনগুলির সমাধান নয়। এখনও, একটি আপডেট আছে।
ডেভ ল্যান্ড

@ ডেভেল্যান্ড হ্যাঁ, এটি হ্যাকের মতো আরও বেশি - এবং এখন যখন আমি চারপাশে তাকিয়েছি তখন বুঝতে পারি এটি আগে প্রস্তাবিত হয়েছিল। যে কোনও উপায়ে, এটি সময়ে সময়ে কার্যকর হতে পারে।
জন ওয়েইজ

উত্তর:


46

না, এটা সম্ভব নয়। আপনি যদি সমস্ত কিছু এক লাইনে চান তবে আপনাকে একটি স্ট্রিং রাখতে এবং যুক্ত থাকতে হবে, বা আপনার আউটপুট অন্য কোথাও রেখেছেন (বলুন, অন্য উইন্ডো)।


4
আসলে, এটি সম্ভব, তবে সবার ব্যবহারের জন্য নয়। আমার ক্ষেত্রে, আমি কমান্ড লাইন টার্মিনাল থেকে ইনপুট পেতে কেবল একটি প্রশ্ন মুদ্রণের চেষ্টা করছিলাম। : উত্তরের জন্য এই প্রশ্নের উত্তর দেখুন stackoverflow.com/questions/26683734/...
deltaray

4
@deltaray readline এর questionনয় console.log। প্রশ্নটি নোড.জেএস নয়, ব্রাউজার কনসোল সম্পর্কেও is
রাই-

@ মিনিটেক আপনি এক লাইনে মুদ্রণ করতে স্প্রেড অপারেটর ব্যবহার করতে পারেন। উদাহরণস্বরূপ দেখুন jsfiddle.net/imranqau5373/7m65at9L/2
খান

@ আইমরখান: প্রশ্নটি এমন ছিল না। স্প্রেড অপারেটর এখানে বহু নতুন যুক্তি ব্যবহার করে / ব্যবহার করে নতুন কিছু যুক্ত করে না apply
রাই-

41

নোডজেজে আপনি প্রক্রিয়া.স্টডআউট.উইরাইট ব্যবহার করতে পারেন এবং আপনি চাইলে '\ n' যুক্ত করতে পারেন।

console.log(msg)সমতূল্য process.stdout.write(msg + '\n')


15
নোডজেএস ক্রোম নয় । এই উত্তরটি প্রশ্নের সাথে অপ্রাসঙ্গিক 'আপনি কি নতুন লাইন ছাড়া কনসোল.লগ করতে পারবেন?'
অ্যালেক্স

18

হ্যাঁ এটা সম্ভব (নীচের ডেমোটি পরীক্ষা করে দেখুন) - নেটিভ ব্রাউজার কনসোলের উপরে আপনার নিজস্ব ভার্চুয়াল কনসোলটি প্রয়োগ করে, তারপরে এটি আসল সাথে সিঙ্ক করে।

এটি শোনার চেয়ে এটি অনেক সহজ:

  1. ডিসপ্লে বাফারটি বজায় রাখুন (যেমন প্রতিটি রেখাকে প্রতিনিধিত্ব করে স্ট্রিংগুলির একটি অ্যারে)
  2. কল console.clear()আগের কোনও সামগ্রী মুছে ফেলার জন্য করার আগে
  3. 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);

সরাসরি কনসোল মিথস্ক্রিয়াটির সাথে মিশ্রিত হওয়ার সময় এটির অসুবিধা রয়েছে এবং এটি অবশ্যই কুৎসিত দেখতে পারে - তবে এটির যথাযথ ব্যবহার রয়েছে, যা আপনি এটি ছাড়া অর্জন করতে পারেন নি।


4
এটি এখানে সেরা উত্তর। এমনকি আপনি সর্বোচ্চ পংক্তিগুলিও বলতে পারেন যা লগের স্ট্যাককে যথেষ্ট সংক্ষিপ্ত রাখে, যাতে আপনি একটি বিশাল সংখ্যক ডেটা লগইন না করে।
ম্যাট ওয়ে

17

আপনি নিজের পছন্দমতো জিনিস রাখতে argumentsপারেন:

console.log('hi','these','words','will','be','separated','by','spaces',window,document)

আপনি সেই সমস্ত আউটপুট এক লাইনে রেফারেন্স রেফারেন্সের সাথে পাবেন এবং আপনি সেখান থেকে তাদের পরিদর্শককে নামিয়ে দিতে পারেন।


62
কিভাবে এই প্রশ্নের উত্তর দেয়?
অ্যালেন

17
আমি মনে করি এই উত্তরটি দরকারী।

12
এটি দরকারী। যদিও এটি প্রশ্নের উত্তর দেয় না, তবে বেশিরভাগ লোকেরা যখন এই প্রশ্নটি খুঁজে পাবে তখন তারা কী খুঁজবে তার একটি সমাধান সরবরাহ করে।
শান লিঞ্চ

4
নতুন লাইন ব্যতীত যে কেউ মুদ্রণ করতে চান তা হ'ল নিম্নলিখিত আউটপুটটি জানা যায়নি। অথবা কেবল উদাহরণস্বরূপ বিন্দুগুলি ব্যবহার করে একটি "লোডার বার" কল্পনা করুন।
কার্ল অ্যাডলার

একাধিক যুক্তি ব্যবহার করা কনসোল.লগ স্টাইলিংকে ভেঙে দেয় কারণ আপনি কেবল প্রথম যুক্তির মধ্যে স্টাইল করতে পারেন।
কিওয়ার্টি

12

সংক্ষিপ্ত উত্তর হলো 'না'।

কিন্তু

যদি আপনার ব্যবহারের ক্ষেত্রে কনসোল-ব্লাট এড়ানোর সময় অবিরতভাবে ডেটা পরিবর্তনের জন্য লগ করার চেষ্টা জড়িত থাকে, তবে এটি অর্জনের একটি উপায় (নির্দিষ্ট ব্রাউজারগুলিতে) 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);

মনে রাখবেন এটি সম্ভবত আপনার প্রয়োগের মধ্যে থাকা অন্য কোনও লগিং কার্যকারিতা ভঙ্গ করবে break

দাবি অস্বীকার: আমি এটিকে হ্যাক হিসাবে শ্রেণিবদ্ধ করব।


4
খুব একটা হ্যাক, তবে চালাক। আপনি যদি কনসোলে ইতিমধ্যে লগইন হয়েছে তা ট্র্যাক করে থাকেন (কোনও ধরণের ভার্চুয়াল বাফার বজায় রেখে বলুন), আপনি বাফারটি পুনর্নির্মাণ করতে এবং প্রতিবার সাফ করার পরে একটি নতুন স্ট্রিং যুক্ত করতে পারেন।
danShumway

2

যদি আপনার একমাত্র উদ্দেশ্য অনেকগুলি লাইনে মুদ্রণ করা বন্ধ করে দেয় তবে এক উপায় হ'ল মানগুলি আপনার সম্পূর্ণ কনসোলটি পূরণ করতে না চাইলে তাদেরকে গ্রুপ করা to

পিএস: - আউটপুট জন্য আপনি ব্রাউজার কনসোল দেখুন

let arr = new Array(10).fill(0)


console.groupCollapsed('index')

arr.forEach((val,index) => {
  console.log(index)
})

console.groupEnd()

কনসোল.group

কনসোল.groupClapsed


1

@ শেনান ধারণা সম্পর্কে কিছু:


1

একটি অ্যারেতে আপনার আউটপুট সংগ্রহ করুন এবং তারপরে পছন্দের বিভাজকের সাথে যোগ ফাংশনটি ব্যবহার করুন

function echo(name, num){
    var ar= [];
    for(var i =0;i<num;i++){
        ar.push(name);
    }
    console.log(ar.join(', '));
}

echo("apple",3)

মোডের বিশদগুলির জন্য এছাড়াও অ্যারে.প্রোটোটাইপ.জাইন () দেখুন

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

0

আপনি একক লাইনে আউটপুট প্রদর্শন করতে একটি স্প্রেড অপারেটর ব্যবহার করতে পারেন। জাভাস্ক্রিপ্ট ইএস 6 এর নতুন বৈশিষ্ট্য। নীচে উদাহরণ দেখুন

   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 টেবিল প্রিন্ট করবে।


0

আপনি যদি একটি নতুন লাইন ছাড়াই উদাহরণস্বরূপ কনসোল লগ অ্যারে উপাদানগুলি চান তবে আপনি এটি করতে পারেন

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 

0

ডিবাগিং বা দীর্ঘ শৃঙ্খলিত মানচিত্রগুলি আসলে কী করছে তা শেখার জন্য দরকারী।

let myConsole = (function(){
    let the_log_buffer=[[]], the_count=0, the_single_line=false;
    const THE_CONSOLE=console, LINE_DIVIDER='  ~  ', ONE_LINE='ONE_LINE',     
          PARAMETER_SEPARATOR= ', ', NEW_LINE = Symbol();
          
    const start = (line_type='NOT_ONE_LINE') => {
        the_log_buffer=[[]];
        the_count=0;
        the_single_line = line_type == ONE_LINE;   
        console = myConsole;  
    }
    const stop = () =>  {
        isNewline();
        console = THE_CONSOLE; 
    };                          
    const isNewline = a_param => {
        if (the_single_line && a_param==NEW_LINE) return;
        const buffer_parts = the_log_buffer.map(one_set=> one_set.join(PARAMETER_SEPARATOR))
        const buffer_line = buffer_parts.join(LINE_DIVIDER);    
        if (the_single_line) {                           
          THE_CONSOLE.clear();
        }
        THE_CONSOLE.log( buffer_line ); 
        the_log_buffer = [[]];
        the_count=0;
    }
    const anObject = an_object => {            
        if (an_object instanceof Error){
            const error_props = [...Object.getOwnPropertyNames(an_object)];
            error_props.map( error_key => an_object['_' + error_key] = an_object[error_key] );
        }
        the_log_buffer[the_count].push(JSON.stringify(an_object));
    }
    const aScalar = a_scalar => {
        if (typeof a_scalar === 'string' && !isNaN(a_scalar)) {
            the_log_buffer[the_count].push("'" + a_scalar + "'");
        } else {
            the_log_buffer[the_count].push(a_scalar);
        }
    }
    const notNewline = a_param => typeof a_param === 'object' ? anObject(a_param):aScalar(a_param);
    const checkNewline = a_param => a_param == NEW_LINE ? isNewline(a_param) : notNewline(a_param);
    const log = (...parameters_list) => {   
        the_log_buffer[the_count]=[];
        parameters_list.map( checkNewline );
        if (the_single_line){
            isNewline(undefined);
        }else{
            const last_log = parameters_list.pop();
            if (last_log !== NEW_LINE){
                the_count++;
            }
        }
    }
    return Object.assign({}, console, {start, stop, log, ONE_LINE, NEW_LINE});
})();

function showConcatLog(){
    myConsole.stop();
    myConsole.start();
    console.log('a');
    console.log('bb');  
    console.dir({i:'not', j:'affected', k:'but not in step'})
    console.log('ccc');
    console.log([1,2,3,4,5,'6'], {x:8, y:'9'});
    console.log("dddd", 1, '2', 3, myConsole.NEW_LINE);
    console.log("z", myConsole.NEW_LINE, 8, '7');
    console.log(new Error("error test"));
    myConsole.stop();
}

myConsole.start(myConsole.ONE_LINE);
var stop_callback = 5;
function myCallback(){
    console.log(stop_callback, 'Date.now()', myConsole.NEW_LINE, Date.now());
    stop_callback--;
    if (stop_callback>0){
        window.setTimeout(myCallback, 1000);
    }else{
        showConcatLog();
    }
}       
window.setTimeout(myCallback, 1000);

-3
// 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);
    }
}

4
A.forEach(row => console.log(row.join(' ')))
ভিপি_আর্থ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.