Is there a JavaScript function that can pad a string to get to a determined length?

前端 未结 30 1277
悲哀的现实
悲哀的现实 2020-11-22 08:28

I am in need of a JavaScript function which can take a value and pad it to a given length (I need spaces, but anything would do). I found this:

Code:

相关标签:
30条回答
  • 2020-11-22 09:03

    Taking up Samuel's ideas, upward here. And remember an old SQL script, I tried with this:

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

    It works in all the cases I could imagine:

    a=     1 result  0001
    a=    12 result  0012
    a=   123 result  0123
    a=  1234 result  1234
    a= 12345 result 12345
    a=  '12' result  0012
    
    0 讨论(0)
  • 2020-11-22 09:03

    Here is a JavaScript function that adds specified number of paddings with custom symble. the function takes three parameters.

        padMe --> string or number to left pad
        pads  --> number of pads
        padSymble --> custom symble, default is "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());
        }
    
    /* Here are some results:
    
    > leftPad(1)
    "1"
    > leftPad(1, 4)
    "0001"
    > leftPad(1, 4, "0")
    "0001"
    > leftPad(1, 4, "@")
    "@@@1"
    
    */
    
    0 讨论(0)
  • 2020-11-22 09:05
    1. Never insert data somewhere (especially not at beginning, like str = pad + str;), since the data will be reallocated everytime. Append always at end!
    2. Don't pad your string in the loop. Leave it alone and build your pad string first. In the end concatenate it with your main string.
    3. Don't assign padding string each time (like str += pad;). It is much faster to append the padding string to itself and extract first x-chars (the parser can do this efficiently if you extract from first char). This is exponential growth, which means that it wastes some memory temporarily (you should not do this with extremely huge texts).

    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 讨论(0)
  • 2020-11-22 09:08

    Using the ECMAScript 6 method String#repeat and Arrow functions, a pad function is as simple as:

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

    jsfiddle

    edit: suggestion from the comments:

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

    this way, it wont throw an error when s.lengthis greater than n

    edit2: suggestion from the comments:

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

    this way, you can use the function for strings and non-strings alike.

    0 讨论(0)
  • 2020-11-22 09:08

    Here's a simple function that I use.

    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;
    };
    

    For example:

    pad    (20,'     ');    //   20
    pad   (321,'     ');    //  321
    pad (12345,'     ');    //12345
    pad (   15,'00000');    //00015
    pad (  999,'*****');    //**999
    pad ('cat','_____');    //__cat  
    
    0 讨论(0)
  • 2020-11-22 09:09

    A variant of @Daniel LaFavers' answer.

    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;
    };
    

    For example:

    mask('00000', 11  );   // '00011'
    mask('00011','00' );   // '00000'
    mask( 2     , 3   );   // '3'
    mask('0'    ,'111');   // '1'
    mask('fork' ,'***');   // 'f***'
    mask('_____','dog');   // '__dog'
    
    0 讨论(0)
提交回复
热议问题