javascript - जावास्क्रिप्ट में अग्रणी शून्य के साथ एक संख्या पैड




formatting (6)

अब तक बहुत सी "चालाक" नहीं चल रही है:

function pad(n, width, z) {
  z = z || '0';
  n = n + '';
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}

जब आप किसी संख्या के साथ सरणी प्रारंभ करते हैं, तो यह उस मान पर length सेट के साथ एक सरणी बनाता है ताकि सरणी में कई undefined तत्व शामिल हो। हालांकि कुछ ऐरे उदाहरण विधियों के बिना सरणी तत्वों को छोड़ दिया जाता है, .join() नहीं, या कम से कम नहीं; यह उनसे व्यवहार करता है जैसे उनका मूल्य खाली स्ट्रिंग है। इस प्रकार आपको प्रत्येक सरणी तत्वों के बीच शून्य वर्ण (या जो भी "z" है) की एक प्रति प्राप्त होती है; यही कारण है कि वहां एक + 1 है।

उदाहरण का उपयोग:

pad(10, 4);      // 0010
pad(9, 4);       // 0009
pad(123, 4);     // 0123

pad(10, 4, '-'); // --10

संभावित डुप्लिकेट:
जावास्क्रिप्ट का उपयोग करके मैं ज़ीरोफिल्ल्ड वैल्यू कैसे बना सकता हूं?

जावास्क्रिप्ट में, मुझे पैडिंग की आवश्यकता है।

उदाहरण के लिए, यदि मेरे पास नंबर 9 है, तो यह "000 9" होगा। अगर मेरे पास 10 कहने की संख्या है, तो यह "0010" होगा। ध्यान दें कि इसमें हमेशा चार अंक होंगे।

ऐसा करने का एक तरीका मुझे 0 की संख्या प्राप्त करने के लिए संख्या घटाकर 4 घटा देना होगा।

क्या ऐसा करने का एक मामूली तरीका है?


आप ऐसा कुछ कर सकते हैं:

function pad ( num, size ) {
  return ( Math.pow( 10, size ) + ~~num ).toString().substring( 1 );
}

संपादित करें: यह फ़ंक्शन के लिए केवल एक बुनियादी विचार था, लेकिन बड़ी संख्याओं (साथ ही अमान्य इनपुट) के लिए समर्थन जोड़ने के लिए, यह शायद बेहतर होगा:

function pad ( num, size ) {
  if (num.toString().length >= size) return num;
  return ( Math.pow( 10, size ) + Math.floor(num) ).toString().substring( 1 );
}

यह 2 चीजें करता है:

  1. यदि संख्या निर्दिष्ट आकार से बड़ी है, तो यह केवल संख्या वापस कर देगी।
  2. ~~num स्थान पर Math.floor(num) का उपयोग करना बड़ी संख्या का समर्थन करेगा।

चूंकि आपने बताया है कि यह हमेशा 4 की लंबाई होने जा रहा है, इसलिए मैं इस स्लिम बनाने के लिए कोई त्रुटि जांच नहीं करूँगा। ;)

function pad(input) {
    var BASE = "0000";
    return input ? BASE.substr(0, 4 - Math.ceil(input / 10)) + input : BASE;
}

आइडिया: बस प्रदान की गई संख्या के साथ '0000' को प्रतिस्थापित करें ... इसके साथ समस्या है, यदि input 0 है, तो मुझे '0000' वापस करने के लिए इसे हार्ड-कोड करने की आवश्यकता है। जबरदस्त हंसी।

यह काफी चिकना होना चाहिए।

जेएसफ़िडलर: http://jsfiddle.net/Up5Cr/


प्रयत्न:

String.prototype.lpad = function(padString, length) {
    var str = this;
    while (str.length < length)
        str = padString + str;
    return str;
}

अब परीक्षण करें:

var str = "5";
alert(str.lpad("0", 4)); //result "0005"
var str = "10"; // note this is string type
alert(str.lpad("0", 4)); //result "0010"

DEMO

ईएस 8 में, हमारे पास नई विधि padStart और padEnd जो वाक्यविन्यास से नीचे है।

'string'.padStart (targetLength [, पैडस्ट्रिंग]):

तो अब हम इसका उपयोग कर सकते हैं

const str = "5";
str.padStart(4, '0'); // '0005'

मजेदार, मुझे हाल ही में ऐसा करना पड़ा।

function padDigits(number, digits) {
    return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
}

इस तरह प्रयोग करें:

padDigits(9, 4);  // "0009"
padDigits(10, 4); // "0010"
padDigits(15000, 4); // "15000"

सुंदर नहीं, लेकिन प्रभावी।


यह वास्तव में 'चालाक' नहीं है लेकिन प्रत्येक पैडिंग 0 लिए स्ट्रिंग कॉन्सटेनेशन करने की तुलना में पूर्णांक संचालन करना तेज़ है।

function ZeroPadNumber ( nValue )
{
    if ( nValue < 10 )
    {
        return ( '000' + nValue.toString () );
    }
    else if ( nValue < 100 )
    {
        return ( '00' + nValue.toString () );
    }
    else if ( nValue < 1000 )
    {
        return ( '0' + nValue.toString () );
    }
    else
    {
        return ( nValue );
    }
}

यह फ़ंक्शन भी आपकी विशेष आवश्यकता (4 अंकों की पैडिंग) के लिए हार्डकोड किया गया है, इसलिए यह सामान्य नहीं है।






formatting