কোনও জাভাস্ক্রিপ্ট ফাংশন রয়েছে যা একটি নির্ধারিত দৈর্ঘ্যের জন্য স্ট্রিং প্যাড করতে পারে?


272

আমি একটি জাভাস্ক্রিপ্ট ফাংশন প্রয়োজন যা একটি মান নিতে এবং একটি নির্দিষ্ট দৈর্ঘ্য এ এটি প্যাড করতে পারে (আমার স্পেস প্রয়োজন, কিন্তু কিছু করতে হবে)। আমি এটি খুঁজে পেয়েছি:

কোড:

String.prototype.pad = function(l, s, t){
    return s || (s = " "), (l -= this.length) > 0 ? (s = new Array(Math.ceil(l / s.length)
        + 1).join(s)).substr(0, t = !t ? l : t == 1 ? 0 : Math.ceil(l / 2))
        + this + s.substr(0, l - t) : this;
};

উদাহরণ:

<script type="text/javascript">
//<![CDATA[

var s = "Jonas";
document.write(
    '<h2>S = '.bold(), s, "</h2>",
    'S.pad(20, "[]", 0) = '.bold(), s.pad(20, "[]", 0), "<br />",
    'S.pad(20, "[====]", 1) = '.bold(), s.pad(20, "[====]", 1), "<br />",
    'S.pad(20, "~", 2) = '.bold(), s.pad(20, "~", 2)
);

//]]>
</script>

তবে হ্যাকটি কী করছে তা আমার কোনও ধারণা নেই এবং এটি আমার পক্ষে কাজ করে বলে মনে হয় না।


উত্তর:


515

আমি এই সমাধানটি এখানে পেয়েছি এবং এটি আমার পক্ষে অনেক সহজ:

var n = 123

String("00000" + n).slice(-5); // returns 00123
("00000" + n).slice(-5); // returns 00123
("     " + n).slice(-5); // returns "  123" (with two spaces)

এবং এখানে আমি স্ট্রিং অবজেক্টে একটি এক্সটেনশন করেছি:

String.prototype.paddingLeft = function (paddingValue) {
   return String(paddingValue + this).slice(-paddingValue.length);
};

এটি ব্যবহারের একটি উদাহরণ:

function getFormattedTime(date) {
  var hours = date.getHours();
  var minutes = date.getMinutes();

  hours = hours.toString().paddingLeft("00");
  minutes = minutes.toString().paddingLeft("00");

  return "{0}:{1}".format(hours, minutes);
};

String.prototype.format = function () {
    var args = arguments;
    return this.replace(/{(\d+)}/g, function (match, number) {
        return typeof args[number] != 'undefined' ? args[number] : match;
    });
};

এটি "15:30" ফর্ম্যাটে একটি সময় ফিরে আসবে


11
আমি সর্বাধিক পঠনযোগ্য এবং সংক্ষিপ্ত পদ্ধতির সন্ধান পেয়েছি; এত সহজ যে আমি সাধারণত প্রোটোটাইপ এক্সটেনশন নিয়েও বিরক্ত করব না (কমপক্ষে কোনও অ্যাপ্লিকেশনে কয়েকটি ব্যবহারের জন্য)। সাবাশ.
brichins

32
সচেতন থাকুন, এই সমাধানটি স্লাইস আর্গুমেন্টের তুলনায় দীর্ঘতর স্ট্রিংগুলি সংক্ষিপ্ত করবে (অর্থাত্ এখানে এখানে পাঁচটি অক্ষর)।
ডেনিস ভি

1
হাই ইয়ানিভ অ্যালগরিদমটি সংশোধন করার জন্য আপনার কাছে খুব ভাল পরামর্শ রয়েছে। যাইহোক, আমার ক্ষেত্রে, প্রয়োজনীয়তাগুলি সর্বদা এই সমস্যাটির আগে থাকে কারণ আমি যখন কোনও কিছু ফর্ম্যাট করার চেষ্টা করি তখন আমার যে মূল্যটি চিকিত্সা করতে হয় সে সম্পর্কে সর্বদা আমার সর্বনিম্ন স্পেসিফিকেশন থাকে এবং এই ক্ষেত্রে, স্পেসিফিকেশনগুলি এই সমস্যাটিকে সংশোধন করবে। উদাহরণস্বরূপ, যদি আমার কাছে ফর্ম্যাট করার জন্য একটি ফোন নম্বর থাকে এবং আমি কেবল কানাডায় ফোনটি পরিচালনা করি তবে আমি ফর্ম্যাট করার আগে ফোন নম্বরটিতে 10 টি অক্ষর রয়েছে তা যাচাই করব। যে কোনও ক্ষেত্রে, আপনার সমাধানটিও দুর্দান্ত। :)
স্যামুয়েল

1
আপনি এই অনেক (আপনার পৃষ্ঠা বা অন্যান্য আবেদনের ভিত্তিতে কিছু বাছাই একটি তালিকা মানগুলির যেমন প্যাডিং একটি দীর্ঘ তালিকা) করছেন তাহলে আরো একটি সঙ্গে উত্তর দেখার একটি দ্রুততর পদ্ধতিstackoverflow.com/questions/2686855/...
শ্যাম Habarakada

6
জেএস String লিবস ব্যবহার করতে String.padStart()এবং String.padEnd()বাম / ডান প্যাডিংয়ের জন্য এটি খারাপভাবে আপডেট করা দরকার ।
সুডোকিড

119

একটি দ্রুত পদ্ধতি

আপনি যদি বারবার এটি করছেন, উদাহরণস্বরূপ একটি অ্যারেতে প্যাডের মানগুলি, এবং কার্য সম্পাদন একটি ফ্যাক্টর, নীচের পদ্ধতিটি আপনাকে আন্তঃ ওয়েবগুলিতে আলোচিত অন্যান্য সমাধানের তুলনায় গতি ( jscreen ) এর প্রায় 100x সুবিধা দিতে পারে । প্রাথমিক ধারণাটি হ'ল আপনি বাফার হিসাবে ব্যবহারের জন্য প্যাড ফাংশনটি সম্পূর্ণ প্যাডেড খালি স্ট্রিং সহ সরবরাহ করছেন। প্যাড ফাংশনটি কেবলমাত্র এই প্রাক-প্যাডযুক্ত স্ট্রিং (একটি স্ট্রিং কনক্যাট) এ যুক্ত হওয়ার জন্য স্ট্রিংয়ের সাথে যুক্ত হয় এবং তারপরে কাঙ্ক্ষিত বা কাঙ্ক্ষিত দৈর্ঘ্যে ফলাফল ছাঁটাই করে দেয়।

function pad(pad, str, padLeft) {
  if (typeof str === 'undefined') 
    return pad;
  if (padLeft) {
    return (pad + str).slice(-pad.length);
  } else {
    return (str + pad).substring(0, pad.length);
  }
}

উদাহরণস্বরূপ, 10 অঙ্কের দৈর্ঘ্যে একটি সংখ্যা শূন্য প্যাড করতে,

pad('0000000000',123,true);

হোয়াইটস্পেস দিয়ে স্ট্রিং প্যাড করতে, তাই পুরো স্ট্রিংটি 255 টি অক্ষর,

var padding = Array(256).join(' '), // make a string of 255 spaces
pad(padding,123,true);

কর্মক্ষমতা পরীক্ষা

এখানে jscreen পরীক্ষা দেখুন ।

এবং এটি ES6 string.repeatবাই 2x এর চেয়েও দ্রুতগতি সম্পন্ন, এখানে সংশোধিত জেসপ্রুভ দ্বারা দেখানো হয়েছে


5
স্ট্যাক ওভারফ্লো নিয়ে আমার সমস্যার একটি অংশ হ'ল পরিষ্কারভাবে উচ্চতর উত্তরগুলির ভিত্তিতে ভোটারদের পরিবর্তন করতে অক্ষমতা। এই সেই ক্ষেত্রে এক।
জেসন সেব্রিং

1
যেহেতু অন্য কেউ পরবর্তী জেএসপ্রেমে প্রমাণিত হয়েছে (উপরে লিঙ্কগুলি যুক্ত হয়েছে), এই পদ্ধতির ES6 string.repeatপদ্ধতির চেয়ে ~ 2x দ্রুত । সুতরাং আপনি যদি অনেকগুলি স্ট্রিং প্যাডিং করছেন তবে অবশ্যই এটি চেষ্টা করুন।
শ্যাম হাবারকদা

5
আমি জেসনের মন্তব্য শুনে বিভ্রান্ত হয়েছি - এই উত্তর গৃহীত থেকে আলাদা কীভাবে?
corwin.amber

1
আমি আপনার jscreen তাকিয়ে। এই পরীক্ষাগুলি আপনার ফাংশন এবং এমন কিছু জিনিস যা কিছুক্ষণ () লুপ ব্যবহার করে যা অন্য কোনও উচ্চ-রেটযুক্ত উত্তর ব্যবহার করে না। আমি নিশ্চিত না যে এর মানে দ্রুততর?
হোল্ডঅফহাঙ্গার

48

http://www.webtoolkit.info/javascript_pad.html

/**
*
*  Javascript string pad
*  http://www.webtoolkit.info/
*
**/

var STR_PAD_LEFT = 1;
var STR_PAD_RIGHT = 2;
var STR_PAD_BOTH = 3;

function pad(str, len, pad, dir) {

    if (typeof(len) == "undefined") { var len = 0; }
    if (typeof(pad) == "undefined") { var pad = ' '; }
    if (typeof(dir) == "undefined") { var dir = STR_PAD_RIGHT; }

    if (len + 1 >= str.length) {

        switch (dir){

            case STR_PAD_LEFT:
                str = Array(len + 1 - str.length).join(pad) + str;
            break;

            case STR_PAD_BOTH:
                var padlen = len - str.length;
                var right = Math.ceil( padlen / 2 );
                var left = padlen - right;
                str = Array(left+1).join(pad) + str + Array(right+1).join(pad);
            break;

            default:
                str = str + Array(len + 1 - str.length).join(pad);
            break;

        } // switch

    }

    return str;

}

এটি অনেক বেশি পাঠযোগ্য।


1
প্যাড কোনও স্থান হলে কাজ করবে বলে মনে হয় না:pad("hello", 20) = "hello "
সিলিও মালান

40

এখানে এটির পুনরাবৃত্তির পদ্ধতি রয়েছে।

function pad(width, string, padding) { 
  return (width <= string.length) ? string : pad(width, padding + string, padding)
}

একটি উদাহরণ...

pad(5, 'hi', '0')
=> "000hi"

7
এছাড়াও পূর্ণসংখ্যার গুণণের একটি পুনরাবৃত্ত সংজ্ঞা রয়েছে ... সর্বদা মনে রাখবেন পুনরাবৃত্তিতে একটি 'অভিশাপ' রয়েছে ...
প্রবাহিত করুন

32
রাস্তায় নরওহাল এবং এক মাতাল লোকও রয়েছে, তবে উভয়ই প্রাসঙ্গিক নয়। পুনরাবৃত্তির অভিশাপ কেবল তখনই প্রযোজ্য হয় যখন কোনও প্রোগ্রামার তার উপযুক্ত কখন তা জানে না।
hypno7oad

12
"পুনরাবৃত্তির অভিশাপ তখনই প্রযোজ্য হয় যখন কোনও প্রোগ্রামার তার উপযুক্ত কখন তা জানে না" বা যখন তারা বুঝতে পারে না যে এটি অনুপযুক্ত। যেমন একটি সরল স্ট্রিং প্যাড ফাংশন জন্য।
নৃত্য

এটি বেশ মার্জিত এবং আমার ব্যবহারের ক্ষেত্রে পুরোপুরি কাজ করেছে। পাঠ্য সারিবদ্ধ করার জন্য আপনার যদি স্পেস প্যাডের প্রয়োজন হয় তবে কেবল দীর্ঘতম স্ট্রিংয়ের দৈর্ঘ্যটি ফেলে দিন =)
দামন আঃ

12
এটি মার্জিত, তবে এটি ফাংশনের প্রতিটি পুনরাবৃত্তিতে একটি নতুন স্ট্রিং তৈরি করে। এই ফাংশনটি হ'ল (এন), যখন স্যামুয়েল দ্বারা সর্বাধিক জনপ্রিয় সমাধান হ'ল ও (1)। উভয়ই মার্জিত, তবে একটি অত্যন্ত কার্যকর। এটি বলেছিল, এটি একটি ঝরঝরে দৃষ্টিভঙ্গি এবং অন্য ভাষায় এটি আরও দ্রুত হতে পারে।
6:32

40

String.prototype.padStart()এবং String.prototype.padEnd()বর্তমানে টিসি 39 প্রার্থীর প্রস্তাব: github.com/tc39/proposal-string-pad-start-end দেখুন (শুধুমাত্র এপ্রিল ২০১ 2016 হিসাবে ফায়ারফক্সে উপলব্ধ; একটি পলিফিল উপলব্ধ)।


13
এখন সমস্ত (আধুনিক) ব্রাউজার দ্বারা সমর্থিত: বিকাশকারী.মোজিলা.আর.ইন.ইউএস
ডকস

myString.padStart(padLength [, padString])myString.padEnd(padLength [, padString])
অলসতার

1
দয়া করে কিছু উদাহরণ ব্যবহার যুক্ত করুন, এটি এখন সমস্ত আধুনিক ব্রাউজার দ্বারা সমর্থিত। এটি উত্সাহিত করা উচিত।
ফ্র্যাঙ্কলিন ইউ

পবিত্র বাজে কথা, আজ অবধি আমি এরকম শুনিনি কি করে ?? এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
ইলেক্ট্রোভির

29

ECMAScript 2017 স্ট্রিং প্রোটোটাইপে একটি প্যাডস্টার্ট পদ্ধতি যুক্ত করে। এই পদ্ধতিটি একটি নির্দিষ্ট দৈর্ঘ্যের স্পেস সহ একটি স্ট্রিং প্যাড করবে। এই পদ্ধতিতে একটি alচ্ছিক স্ট্রিংও লাগে যা প্যাডিংয়ের জন্য স্থানগুলির পরিবর্তে ব্যবহৃত হবে।

'abc'.padStart(10);         // "       abc"
'abc'.padStart(10, "foo");  // "foofoofabc"
'abc'.padStart(6,"123465"); // "123abc"
'abc'.padStart(8, "0");     // "00000abc"
'abc'.padStart(1);          // "abc"

একটি প্যাড এবং পদ্ধতিও যুক্ত করা হয়েছিল যা একই পদ্ধতিতে কাজ করে।

ব্রাউজারের সামঞ্জস্যের জন্য (এবং একটি দরকারী পলফিল) এই লিঙ্কটি দেখুন


সেরা উত্তর আজকাল জন্য এখানে ! 2019!
পিটার ক্রাউস

22

ECMAScript 6 পদ্ধতি স্ট্রিং # পুনরাবৃত্তি ব্যবহার করে , একটি প্যাড ফাংশন যতটা সহজ:

String.prototype.padLeft = function(char, length) { 
    return char.repeat(Math.max(0, length - this.length)) + this;
}

String#repeatবর্তমানে কেবল ফায়ারফক্স এবং ক্রোমে সমর্থিত। অন্যান্য প্রয়োগের জন্য, কেউ নিম্নলিখিত সাধারণ পলিফিল বিবেচনা করতে পারেন:

String.prototype.repeat = String.prototype.repeat || function(n){ 
    return n<=1 ? this : (this + this.repeat(n-1)); 
}

নোড.জেজেসে যারা কাজ করছেন তাদের জন্য স্ট্রিং.রেপিয়াটও সেখানে সমর্থিত।
jkt123

15

ECMAScript 6 পদ্ধতি স্ট্রিং # পুনরাবৃত্তি এবং তীর ফাংশনগুলি ব্যবহার করে একটি প্যাড ফাংশন যতটা সহজ:

var leftPad = (s, c, n) => c.repeat(n - s.length) + s;
leftPad("foo", "0", 5); //returns "00foo"

jsfiddle

সম্পাদনা করুন: মন্তব্যগুলি থেকে পরামর্শ:

const leftPad = (s, c, n) => n - s.length > 0 ? c.repeat(n - s.length) + s : s;

এইভাবে, এর s.lengthচেয়ে বেশি হলে এটি ত্রুটি ছুঁড়ে দেবে নাn

edit2: মন্তব্যগুলি থেকে পরামর্শ:

const leftPad = (s, c, n) =>{ s = s.toString(); c = c.toString(); return s.length > n ? s : c.repeat(n - s.length) + s; }

এইভাবে, আপনি একইভাবে স্ট্রিং এবং নন-স্ট্রিংয়ের জন্য ফাংশনটি ব্যবহার করতে পারেন।


1
এটি দুর্দান্ত, তবে এটির s.lengthচেয়ে বড় হলে তা nছুঁড়ে দেবে। পরামর্শ:let leftPad = (s, c, n) => n - s.length > 0 ? c.repeat(n - s.length) + s : s;
ডেভিড জি

এটি নন-স্ট্রিংয়ের জন্য কাজ করে না। হিসাবে হিসাবে leftPad(12, ' ', 5)। যদিও আমি কঠোরভাবে বলতে জানি এটি সম্ভবত ঠিক আছে এটি সম্ভবত ব্যবহারের অন্যতম সাধারণ কেস (প্যাডিং সংখ্যা)। হতে পারে function leftPad(s, c, n) { s = s.toString(); return s.length > len ? s : c.repeat(n - s.length) + s; }। ব্যবহার functionমানে leftPad ফাইল নীচে হতে পারে। অন্যথায় আপনি তর্কসাপেক্ষে ব্যবহার করা উচিত constনা varকিংবা let
gman

@gman এই পরামর্শের জন্য ধন্যবাদ, কিন্তু আপনার পরিবর্তনশীল কি len?
ইনসপ

দোহ, lenহওয়া উচিতn
gman

14

এই উভয় সমাধানের মূল কৌশলটি হ'ল arrayএকটি নির্দিষ্ট আকার (পছন্দসই দৈর্ঘ্যের তুলনায় আরও একটি) দিয়ে একটি উদাহরণ তৈরি করা , এবং তারপরে তত্ক্ষণাত join()পদ্ধতিটি কল করা stringjoin()পদ্ধতি পাস করা হয়েছে প্যাডিং string(ব্যবধান সম্ভবত)। যেহেতু arrayখালিটি খালি রয়েছে তাই খালি কক্ষগুলি একটি ফলাফলের stringsসাথে যোগদানের প্রক্রিয়া চলাকালীন ফাঁকা হিসাবে রেন্ডার করা হবে এবং কেবল প্যাডিং থাকবে। এটি সত্যিই দুর্দান্ত কৌশল।arraystring


10

ডিফল্ট মান সহ প্যাড

আমি লক্ষ্য করেছি যে আমার বেশিরভাগ সময় রূপান্তর / নম্বর প্যাডিংয়ের জন্য প্যাডলিফ্টের প্রয়োজন need

সুতরাং আমি এই ফাংশন লিখেছি

function padL(a,b,c){//string/number,length=2,char=0
 return (new Array(b||2).join(c||0)+a).slice(-b)
}

এই সাধারণ ফাংশনটি সংখ্যা বা স্ট্রিং সমর্থন করে ইনপুট হিসাবে

ডিফল্ট প্যাড 2 অক্ষর

ডিফল্ট চর 0

সুতরাং আমি সহজভাবে লিখতে পারেন

padL(1);
// 01

যদি আমি দ্বিতীয় যুক্তি যুক্ত করি (প্যাড প্রস্থ)

padL(1,3);
// 001

তৃতীয় প্যারামিটার (প্যাড চর)

padL('zzz',10,'x');
// xxxxxxxzzz

আপনি যদি একটি অপরিবর্তিত মান বা একটি 0 দৈর্ঘ্যের স্ট্রিংটি পাস করেন তবে @ বনানাএসিড সম্পাদনা করুন0undefined :

যেভাবে নির্দেশিত

function padL(a,b,c){//string/number,length=2,char=0
 return (new Array((b||1)+1).join(c||0)+(a||'')).slice(-(b||2))
}

তবে এটি একটি সংক্ষিপ্ত উপায়েও অর্জন করা যায়।

function padL(a,b,c){//string/number,length=2,char=0
 return (new Array(b||2).join(c||0)+(a||c||0)).slice(-b)
}

এর সাথেও কাজ করে:

padL(0)
padL(NaN)
padL('')
padL(undefined)
padL(false)

এবং আপনি যদি উভয় উপায়ে প্যাড করতে সক্ষম হতে চান:

function pad(a,b,c,d){//string/number,length=2,char=0,0/false=Left-1/true=Right
return a=(a||c||0),c=new Array(b||2).join(c||0),d?(a+c).slice(0,b):(c+a).slice(-b)
}

যা স্লাইস ব্যবহার না করে আরও ছোট উপায়ে লেখা যেতে পারে।

function pad(a,b,c,d){
 return a=(a||c||0)+'',b=new Array((++b||3)-a.length).join(c||0),d?a+b:b+a
}
/*

Usage:

pad(
 input // (int or string) or undefined,NaN,false,empty string
       // default:0 or PadCharacter
 // optional
 ,PadLength // (int) default:2
 ,PadCharacter // (string or int) default:'0'
 ,PadDirection // (bolean) default:0 (padLeft) - (true or 1) is padRight 
)

*/

এখন যদি আপনি 2 দিয়ে 'অ্যাওয়ারিলংওয়ার্ড' প্যাড করার চেষ্টা করেন ... তবে এটি আমার সমস্যা নয়।


বলেছিল আমি তোমাকে একটা টিপস দিচ্ছি।

আপনি প্যাড করলে বেশিরভাগ সময় এটি একই মানের N বারের জন্য করেন।

লুপের ভিতরে যে কোনও ধরণের ফাংশন ব্যবহার করা লুপকে ধীর করে দেয় !!!

সুতরাং আপনি যদি প্যাডটি চান তবে একটি দীর্ঘ তালিকার ভিতরে কিছু নম্বর রেখেছেন তবে এই সাধারণ কাজটি করার জন্য ফাংশন ব্যবহার করবেন না।

এর মতো কিছু ব্যবহার করুন:

var arrayOfNumbers=[1,2,3,4,5,6,7],
    paddedArray=[],
    len=arrayOfNumbers.length;
while(len--){
 paddedArray[len]=('0000'+arrayOfNumbers[len]).slice(-4);
}

যদি আপনি না জানেন যে অ্যারের অভ্যন্তরের সংখ্যার ভিত্তিতে সর্বাধিক প্যাডিং আকার size

var arrayOfNumbers=[1,2,3,4,5,6,7,49095],
    paddedArray=[],
    len=arrayOfNumbers.length;

// search the highest number
var arrayMax=Function.prototype.apply.bind(Math.max,null),
// get that string length
padSize=(arrayMax(arrayOfNumbers)+'').length,
// create a Padding string
padStr=new Array(padSize).join(0);
// and after you have all this static values cached start the loop.
while(len--){
 paddedArray[len]=(padStr+arrayOfNumbers[len]).slice(-padSize);//substr(-padSize)
}
console.log(paddedArray);

/*
0: "00001"
1: "00002"
2: "00003"
3: "00004"
4: "00005"
5: "00006"
6: "00007"
7: "49095"
*/

খুব সুন্দর! একই ফলাফলটি নিয়ে এসেছিল ঠিক যেমন একটি নোট: এই স্ট্রিংটি প্রদত্ত সর্বাধিক দৈর্ঘ্যের সাথে মিলিত হয় এবং খালি স্ট্রিংটি একটি চর খুব সংক্ষিপ্ত হবে এবং অপরিজ্ঞাত স্তরের ফলস্বরূপ 'অপরিবর্তিত' মৌমাছির ফলস্বরূপ বিচ্ছিন্নতা ফেলতে পারে - সংযুক্ত return (new Array((b||1)+1).join(c||0)+(a||'')).slice(-(b||2))। এবং সর্বদা হিসাবে: আপনি ছেলেরা, আপনি যে কোডটি বোঝেন না কেবল তা অনুলিপি করবেন না।
কলাআসিড

1
(নতুন অ্যারে (খ || 2) .join (গ || 0) + + (ক || গ || 0)) ফালি (-b) ... খাটো।
cocco


9

স্যামুয়েল এর ধারণাগুলি গ্রহণ, এখানে wardর্ধ্বমুখী। এবং একটি পুরানো এসকিউএল স্ক্রিপ্ট মনে রাখবেন, আমি এটি দিয়ে চেষ্টা করেছি:

a=1234;
'0000'.slice(a.toString().length)+a;

এটি যে সমস্ত ক্ষেত্রে আমি কল্পনা করতে পারি তাতে কাজ করে:

a=     1 result  0001
a=    12 result  0012
a=   123 result  0123
a=  1234 result  1234
a= 12345 result 12345
a=  '12' result  0012

5

প্যাডিং স্ট্রিংটি নতুন জাভাস্ক্রিপ্ট সংস্করণে অন্তর্ভুক্ত করা হয়েছে।

str.padStart(targetLength [, padString])

https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/padStart

আপনি যদি নিজের ফাংশন চান তবে এই উদাহরণটি পরীক্ষা করুন:

const myString = 'Welcome to my house';
String.prototype.padLeft = function(times = 0, str = ' ') {
    return (Array(times).join(str) + this);
}
console.log(myString.padLeft(12, ':'));
//:::::::::::Welcome to my house

এই উত্তরটি একাধিক অন্যান্য উত্তর দ্বারা উল্লিখিত হয়েছে সুতরাং এটি এমন একটি সদৃশ যা কোনও নতুন তথ্য যুক্ত করে না। উত্তর দেওয়ার আগে অনুসন্ধান করুন।
ফ্র্যাঙ্কলিন ইউ

এটি সম্পূর্ণ স্বাক্ষর সহ প্রথম। এবং এটি অবশ্যই আজকের একমাত্র উত্তর হতে হবে।
d_f

4

এখানে আমি ব্যবহার করি একটি সাধারণ ফাংশন।

var pad=function(num,field){
    var n = '' + num;
    var w = n.length;
    var l = field.length;
    var pad = w < l ? l-w : 0;
    return field.substr(0,pad) + n;
};

উদাহরণ স্বরূপ:

pad    (20,'     ');    //   20
pad   (321,'     ');    //  321
pad (12345,'     ');    //12345
pad (   15,'00000');    //00015
pad (  999,'*****');    //**999
pad ('cat','_____');    //__cat  


3

এস 7 এখনই খসড়া এবং প্রস্তাবসমূহ, তবে আপনি যদি অনুমানের সাথে সামঞ্জস্যতা ট্র্যাক করতে চান তবে আপনার প্যাড ফাংশনগুলির প্রয়োজন:

  1. মাল্টি-ক্যারেক্টার প্যাড সমর্থন।
  2. ইনপুট স্ট্রিংটি কেটে ফেলবেন না
  3. মহাকাশে প্যাড ডিফল্ট

আমার পলিফিল লাইব্রেরি থেকে, তবে প্রোটোটাইপ এক্সটেনশনের জন্য আপনার নিজস্ব যথাযথ পরিশ্রম প্রয়োগ করুন।

// Tests
'hello'.lpad(4) === 'hello'
'hello'.rpad(4) === 'hello'
'hello'.lpad(10) === '     hello'
'hello'.rpad(10) === 'hello     '
'hello'.lpad(10, '1234') === '41234hello'
'hello'.rpad(10, '1234') === 'hello12341'

String.prototype.lpad || (String.prototype.lpad = function( length, pad )
{
    if( length < this.length ) return this;

    pad = pad || ' ';
    let str = this;

    while( str.length < length )
    {
        str = pad + str;
    }

    return str.substr( -length );
});

String.prototype.rpad || (String.prototype.rpad = function( length, pad )
{
    if( length < this.length ) return this;

    pad = pad || ' ';
    let str = this;

    while( str.length < length )
    {
        str += pad;
    }

    return str.substr( 0, length );
});

3

মূলত কোডের এক লাইনের একটি সহজ উত্তর এখানে।

var value = 35 // the numerical value
var x = 5 // the minimum length of the string

var padded = ("00000" + value).substr(-x);

আপনার প্যাডিংয়ে শূন্যের অক্ষরের সংখ্যা, এখানে শূন্যগুলি নিশ্চিত করুন যে আপনার ন্যূনতম দৈর্ঘ্যের দৈর্ঘ্য কমপক্ষে। সুতরাং সত্যিই, এটিকে একটি লাইনে ফেলতে, এই ক্ষেত্রে "00035" এর ফলাফল পাওয়ার জন্য:

var padded = ("00000" + 35).substr(-5);

2

সাধারণ স্ট্রিং কনকটের তুলনায় অ্যারে ম্যানিপুলেশনগুলি আসলেই ধীর। অবশ্যই, আপনার ব্যবহারের ক্ষেত্রে বেঞ্চমার্ক।

function(string, length, pad_char, append) {
    string = string.toString();
    length = parseInt(length) || 1;
    pad_char = pad_char || ' ';

    while (string.length < length) {
        string = append ? string+pad_char : pad_char+string;
    }
    return string;
};

2

@ ড্যানিয়েল লাফলারদের উত্তরের একটি রূপ ।

var mask = function (background, foreground) {
  bg = (new String(background));
  fg = (new String(foreground));
  bgl = bg.length;
  fgl = fg.length;
  bgs = bg.substring(0, Math.max(0, bgl - fgl));
  fgs = fg.substring(Math.max(0, fgl - bgl));
  return bgs + fgs;
};

উদাহরণ স্বরূপ:

mask('00000', 11  );   // '00011'
mask('00011','00' );   // '00000'
mask( 2     , 3   );   // '3'
mask('0'    ,'111');   // '1'
mask('fork' ,'***');   // 'f***'
mask('_____','dog');   // '__dog'

2

এটি 2014, এবং আমি একটি জাভাস্ক্রিপ্ট স্ট্রিং-প্যাডিং ফাংশন প্রস্তাব করছি। হা!

খালি-হাড়: ফাঁকা স্থান সহ ডান-প্যাড

function pad ( str, length ) {
    var padding = ( new Array( Math.max( length - str.length + 1, 0 ) ) ).join( " " );
    return str + padding;
}

অভিনব: বিকল্পগুলির সাথে প্যাড

/**
 * @param {*}       str                         input string, or any other type (will be converted to string)
 * @param {number}  length                      desired length to pad the string to
 * @param {Object}  [opts]
 * @param {string}  [opts.padWith=" "]          char to use for padding
 * @param {boolean} [opts.padLeft=false]        whether to pad on the left
 * @param {boolean} [opts.collapseEmpty=false]  whether to return an empty string if the input was empty
 * @returns {string}
 */
function pad ( str, length, opts ) {
    var padding = ( new Array( Math.max( length - ( str + "" ).length + 1, 0 ) ) ).join( opts && opts.padWith || " " ),
        collapse = opts && opts.collapseEmpty && !( str + "" ).length;
    return collapse ? "" : opts && opts.padLeft ? padding + str : str + padding;
}

ব্যবহার (অভিনব):

pad( "123", 5 );
// returns "123  "

pad( 123, 5 );
// returns "123  " - non-string input

pad( "123", 5, { padWith: "0", padLeft: true } );
// returns "00123"

pad( "", 5 );
// returns "     "

pad( "", 5, { collapseEmpty: true } );
// returns ""

pad( "1234567", 5 );
// returns "1234567"


2

আমি মনে করি পুনরাবৃত্তি এড়াতে ভাল কারণ এটি ব্যয়বহুল।

function padLeft(str,size,padwith) {
	if(size <= str.length) {
        // not padding is required.
		return str;
	} else {
        // 1- take array of size equal to number of padding char + 1. suppose if string is 55 and we want 00055 it means we have 3 padding char so array size should be 3 + 1 (+1 will explain below)
        // 2- now join this array with provided padding char (padwith) or default one ('0'). so it will produce '000'
        // 3- now append '000' with orginal string (str = 55), will produce 00055

        // why +1 in size of array? 
        // it is a trick, that we are joining an array of empty element with '0' (in our case)
        // if we want to join items with '0' then we should have at least 2 items in the array to get joined (array with single item doesn't need to get joined).
        // <item>0<item>0<item>0<item> to get 3 zero we need 4 (3+1) items in array   
		return Array(size-str.length+1).join(padwith||'0')+str
	}
}

alert(padLeft("59",5) + "\n" +
     padLeft("659",5) + "\n" +
     padLeft("5919",5) + "\n" +
     padLeft("59879",5) + "\n" +
     padLeft("5437899",5));


1

এখানে একটি জাভাস্ক্রিপ্ট ফাংশন যা কাস্টম সিম্বল সহ নির্দিষ্ট সংখ্যক প্যাডিং যুক্ত করে। ফাংশনটি তিনটি পরামিতি নেয়।

    প্যাডম -> স্ট্রিং বা বাম প্যাডের সংখ্যা
    প্যাড -> প্যাডের সংখ্যা
    প্যাডসিম্বল -> কাস্টম সিম্বল, ডিফল্ট "0" 

    function leftPad(padMe, pads, padSymble) {
         if( typeof padMe === "undefined") {
             padMe = "";
         }
         if (typeof pads === "undefined") {
             pads = 0;
         }
         if (typeof padSymble === "undefined") {
             padSymble = "0";
         }

         var symble = "";
         var result = [];
         for(var i=0; i < pads ; i++) {
            symble += padSymble;
         }
        var length = symble.length - padMe.toString().length;
        result = symble.substring(0, length);
        return result.concat(padMe.toString());
    }
/ * এখানে কিছু ফলাফল রয়েছে:

> বামপ্যাড (1)
"1"
> বামপ্যাড (1, 4)
"0001"
> বামপ্যাড (1, 4, "0")
"0001"
> বামপ্যাড (1, 4, "@")
"@@@ 1"

* /

1
/**************************************************************************************************
Pad a string to pad_length fillig it with pad_char.
By default the function performs a left pad, unless pad_right is set to true.

If the value of pad_length is negative, less than, or equal to the length of the input string, no padding takes place.
**************************************************************************************************/
if(!String.prototype.pad)
String.prototype.pad = function(pad_char, pad_length, pad_right) 
{
   var result = this;
   if( (typeof pad_char === 'string') && (pad_char.length === 1) && (pad_length > this.length) )
   {
      var padding = new Array(pad_length - this.length + 1).join(pad_char); //thanks to http://stackoverflow.com/questions/202605/repeat-string-javascript/2433358#2433358
      result = (pad_right ? result + padding : padding + result);
   }
   return result;
}

এবং তারপরে আপনি এটি করতে পারেন:

alert( "3".pad("0", 3) ); //shows "003"
alert( "hi".pad(" ", 3) ); //shows " hi"
alert( "hi".pad(" ", 3, true) ); //shows "hi "

প্রোটোটাইপগুলিতে গণ্ডগোল করবেন না!
রিহার্ডস

1

আপনি যদি প্যাড করতে খুব সহজ হ্যাকি ওয়ান-লাইনার চান তবে কেবলমাত্র সর্বাধিক প্যাডিং দৈর্ঘ্যের কাঙ্ক্ষিত প্যাডিং চরিত্রের একটি স্ট্রিং তৈরি করুন এবং তারপরে আপনি কী প্যাড করতে চান তার দৈর্ঘ্যের সাথে সংযোজন করুন।

উদাহরণ: স্ট্রিং স্টোরকে e25 টি অক্ষর দীর্ঘ দিয়ে ফাঁকা করে রাখুন।

var e = "hello"; e = e + "                         ".substring(e.length)

ফলাফল: "hello "

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


এটি আসলে বেশ ঝরঝরে, কোনও সাধারণ উদ্দেশ্য ফাংশন হিসাবে নয় - তবে আমি এটিকে একটি লুপ সংরক্ষণের জন্য কয়েকটি প্রসঙ্গে বৈধ হ্যাক হিসাবে দেখতে পেতাম।
অ্যাঙ্কার

আকর্ষণীয় ধারণা। @ এঙ্কর এটি সাধারণ উদ্দেশ্যে কাজ হিসাবে ব্যবহার করতে, আপনি Array(n).join(c)প্যাডিংয়ের দৈর্ঘ্য এবং প্যাডিং চরিত্রটি কনফিগারযোগ্য হিসাবে তৈরি করতে পারেন Array(26).join(' ')
WynandB

1

অন্য একটি দম্পতি সমাধান সংমিশ্রণ সঙ্গে নিতে

/**
 * pad string on left
 * @param {number} number of digits to pad, default is 2
 * @param {string} string to use for padding, default is '0' *
 * @returns {string} padded string
 */
String.prototype.paddingLeft = function (b,c) {
    if (this.length > (b||2))
        return this+'';
  return (this||c||0)+'',b=new Array((++b||3)-this.length).join(c||0),b+this
};

/**
 * pad string on right
 * @param {number} number of digits to pad, default is 2
 * @param {string} string to use for padding, default is '0' *
 * @returns {string} padded string
 */
String.prototype.paddingRight = function (b,c) {
  if (this.length > (b||2))
        return this+'';
  return (this||c||0)+'',b=new Array((++b||3)-this.length).join(c||0),this+b
};    

1

একটি বন্ধু বাম প্যাডে জাভাস্ক্রিপ্ট ফাংশনটি ব্যবহার করার বিষয়ে জিজ্ঞাসা করেছিল। এটি কোড গল্ফ চ্যাট করতে আমাদের মধ্যে কিছু মধ্যে কিছুটা প্রয়াসে পরিণত হয়েছিল। এটি ফলাফল ছিল:

function l(p,t,v){
    v+="";return v.length>=t?v:l(p,t,p+v); 
}

এটি নিশ্চিত করে যে প্যাড করার মানটি একটি স্ট্রিং, এবং তারপরে এটি যদি মোট পছন্দসই দৈর্ঘ্যের দৈর্ঘ্য না হয় তবে এটি একবার প্যাড করবে এবং তারপরে পুনরাবৃত্তি করবে। এটি আরও লজিকাল নামকরণ এবং কাঠামোর সাথে দেখতে দেখতে এটি এখানে

function padLeft(pad, totalLength, value){
    value = value.toString();

    if( value.length >= totalLength ){
        return value;
    }else{
        return padLeft(pad, totalLength, pad + value);
    }
}

আমরা যে উদাহরণটি ব্যবহার করছিলাম তা হ'ল 0সর্বাধিক দৈর্ঘ্যের 6 সংখ্যা বামে প্যাড করা ছিল তা নিশ্চিত করা Here এখানে একটি উদাহরণ সেট রয়েছে:

function l(p,t,v){v+="";return v.length>=t?v:l(p,t,p+v);}

var vals = [6451,123,466750];

var pad = l(0,6,vals[0]);// pad with 0's, max length 6

var pads = vals.map(function(i){ return l(0,6,i) });

document.write(pads.join("<br />"));


1

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

// include the module in your script, there is no need to export
var jsAddOns = require('<path to module>/jsAddOns');

~~~~~~~~~~~~ jsAddOns.js ~~~~~~~~~~~~

/* 
 * method prototype for any Object to pad it's toString()
 * representation with additional characters to the specified length
 *
 * @param padToLength required int
 *     entire length of padded string (original + padding)
 * @param padChar optional char
 *     character to use for padding, default is white space
 * @param padLeft optional boolean
 *     if true padding added to left
 *     if omitted or false, padding added to right
 *
 * @return padded string or
 *     original string if length is >= padToLength
 */
Object.prototype.pad = function(padToLength, padChar, padLeft) {    

    // get the string value
    s = this.toString()

    // default padToLength to 0
    // if omitted, original string is returned
    padToLength = padToLength || 0;

    // default padChar to empty space
    padChar = padChar || ' ';


    // ignore padding if string too long
    if (s.length >= padToLength) {
        return s;
    }

    // create the pad of appropriate length
    var pad = Array(padToLength - s.length).join(padChar);

    // add pad to right or left side
    if (padLeft) {
        return pad  + s;        
    } else {
        return s + pad;
    }
};

1
  1. ডেটা কোথাও str = pad + str;inোকাবেন না (বিশেষত শুরুতে নয়, পছন্দ করুন ), যেহেতু ডেটা প্রতিবার পুনরায় স্থানান্তরিত হবে। সবসময় শেষ!
  2. আপনার স্ট্রিংটি লুপে প্যাড করবেন না। এটি একা ছেড়ে প্রথমে আপনার প্যাড স্ট্রিংটি তৈরি করুন। শেষ পর্যন্ত এটি আপনার মূল স্ট্রিং দিয়ে সম্মতি দিন।
  3. প্রতিবার প্যাডিং স্ট্রিং বরাদ্দ করবেন না (যেমন str += pad;)। প্যাডিংয়ের স্ট্রিংটি নিজের মধ্যে সংযোজন করা এবং প্রথম এক্স-অক্ষর আহরণ করা আরও দ্রুত (পার্সার যদি আপনি প্রথম চর থেকে বের করেন তবে দক্ষতার সাথে এটি করতে পারেন)। এটি তাত্পর্যপূর্ণ বৃদ্ধি, যার অর্থ এটি অস্থায়ীভাবে কিছু স্মৃতি নষ্ট করে (আপনি অত্যন্ত বিশাল পাঠ্য সহ এটি করা উচিত নয়)।

if (!String.prototype.lpad) {
    String.prototype.lpad = function(pad, len) {
        while (pad.length < len) {
            pad += pad;
        }
        return pad.substr(0, len-this.length) + this;
    }
}

if (!String.prototype.rpad) {
    String.prototype.rpad = function(pad, len) {
        while (pad.length < len) {
            pad += pad;
        }
        return this + pad.substr(0, len-this.length);
    }
}


0

এই আমার গ্রহণ

আমি এর পারফরম্যান্স সম্পর্কে এতটা নিশ্চিত নই, তবে আমি এখানে প্রায় অন্যান্য অপশনগুলির চেয়ে অনেক বেশি পঠনযোগ্য দেখতে পেয়েছি ...

var replicate = function(len, char) {
  return Array(len+1).join(char || ' ');
};

var padr = function(text, len, char) {
  if (text.length >= len) return text;
  return text + replicate(len-text.length, char);
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.