代码之家  ›  专栏  ›  技术社区  ›  Anthony Potts

是否有一个javascript函数可以将字符串填充到确定的长度?

  •  249
  • Anthony Potts  · 技术社区  · 14 年前

    我需要一个javascript函数,它可以获取一个值并将其填充到给定的长度(我需要空格,但任何事情都可以)。我发现这个:

    代码:

    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>
    

    但我不知道它到底在干什么,似乎对我不起作用。

    43 回复  |  直到 6 年前
        1
  •  478
  •   Samuel    12 年前

    我找到了这个解决方案 here 这对我来说简单得多:

    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对象进行了扩展:

    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”的时间

        2
  •  114
  •   Shyam Habarakada    9 年前

    更快的方法

    如果重复执行此操作,例如在数组中填充值,并且性能是一个因素,则以下方法可以为您提供 100倍优势 在速度( jsPerf )而不是目前在互联网上讨论的其他解决方案。基本思想是为pad函数提供一个完全填充的空字符串作为缓冲区。pad函数只是附加到要添加到此预填充字符串(一个字符串concat)的字符串,然后将结果切片或修剪为所需的长度。

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

    性能试验

    杰斯普夫 测试 here .

    这比ES6快 string.repeat 2倍,如修订后的jsperf所示 here

        3
  •  49
  •   Community Nick Dandoulakis    6 年前

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

    它的可读性更强。

        4
  •  39
  •   Ronan Jouchet    11 年前

    这里有一个递归的方法。

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

    一个例子…

    pad(5, 'hi', '0')
    => "000hi"
    
        5
  •  29
  •   ChrisV    8 年前

    String.prototype.padStart() String.prototype.padEnd() 目前是否有TC39候选提案:见 github.com/tc39/proposal-string-pad-start-end (仅在2016年4月的Firefox中提供;a polyfill 是可用的)。

        6
  •  22
  •   Guss    10 年前

    使用ecmascript 6方法 String#repeat ,pad函数简单如下:

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

    String#repeat 目前仅在Firefox和Chrome中受支持。对于其他实现,可以考虑以下简单的polyfill:

    String.prototype.repeat = String.prototype.repeat || function(n){ 
        return n<=1 ? this : (this + this.repeat(n-1)); 
    }
    
        7
  •  19
  •   arMedBeta    7 年前

    ecmascript 2017向字符串原型添加了一个padstart方法。此方法将用空格填充字符串到给定长度。此方法还接受将用于填充的可选字符串,而不是空格。

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

    还添加了以相同方式工作的padend方法。

    有关浏览器兼容性(和有用的多边形填充),请参见 this link .

        8
  •  14
  •   Mohd Pankaj Aggarwal    7 年前

    这两种解决方案的关键在于 array 具有给定大小(比所需长度多一个)的实例,然后立即调用 join() 方法使 string . 这个 连接() 方法通过填充 一串 (可能是空格)。自从 数组 为空,空单元格将呈现为空 strings 在加入的过程中 数组 一个结果 一串 ,并且只保留填充。这是一个非常好的技术。

        9
  •  13
  •   InsOp    7 年前

    使用ecmascript 6方法 String#repeat Arrow functions ,pad函数简单如下:

    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

    编辑2: 意见建议:

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

    这样,可以对字符串和非字符串使用相同的函数。

        10
  •  10
  •   cocco    9 年前

    使用默认值填充

    我注意到我主要需要padleft来进行时间转换/数字填充

    所以我写了这个函数

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

    这个简单的函数支持 作为输入

    默认焊盘为 2字符

    默认字符为

    所以我可以简单地写

    padL(1);
    // 01
    

    如果我添加第二个参数(焊盘宽度)

    padL(1,3);
    // 001
    

    第三个参数(pad char)

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

    它可以不使用slice以更短的方式编写。

    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来填充“averylongword”…这不是我的问题。


    说我给你小费。

    大多数情况下,如果你垫你做相同的价值N次。

    在循环中使用任何类型的函数都会减慢循环的速度!!!!

    所以如果你只想在长列表中留下一些数字,不要用函数来做这个简单的事情。

    使用这样的东西:

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

    如果不知道基于数组中的数字的最大填充大小。

    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"
    */
    
        12
  •  6
  •   HoldOffHunger Lux    6 年前

    接受塞缪尔的想法,向上看。还记得一个旧的sql脚本,我尝试过:

    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
    
        13
  •  4
  •   Daniel LaFavers    11 年前

    这是我使用的一个简单函数。

    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  
    
        14
  •  4
  •   Matias Dominguez    7 年前

    一小段路:

    (x=>(new Array(int-x.length+1)).join(char)+x)(String)
    

    例子:

    (x=>(new Array(6-x.length+1)).join("0")+x)("1234")
    

    返回:“001234”

        15
  •  4
  •   daronwolff    6 年前

    填充字符串已在新的javascript版本中输入。

    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
    
        16
  •  3
  •   Adria    9 年前

    es7 现在只是草稿和建议,但是如果您想跟踪与规范的兼容性,您的pad功能需要:

    1. 多字符键盘支持。
    2. 不要截断输入字符串
    3. 填充默认为空格

    从我的polyfill库,但应用你自己的原型扩展尽职调查。

    // 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 );
    });
    
        17
  •  3
  •   Jack Thomson    9 年前

    这里有一个简单的答案,基本上只有一行代码。

    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);
    
        18
  •  2
  •   will Farrell    11 年前

    与简单的字符串concat相比,数组操作非常慢。当然,您的用例的基准测试。

    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;
    };
    
        19
  •  2
  •   Community Nick Dandoulakis    7 年前

    一种变体 @Daniel LaFavers' 回答。

    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'
    
        20
  •  2
  •   hashchange    10 年前

    现在是2014年,我建议使用javascript字符串填充函数。哈!

    裸骨:带空格的右垫

    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"
    
        21
  •  2
  •   Brian M. Hunt    9 年前

    如果您不介意包括一个实用程序库,lodash库 _.pad, _.padLeft and _.padRight 功能。

        22
  •  2
  •   Sheikh Abdul Wahid    8 年前

    我认为最好避免递归,因为它代价高昂。

    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));
        23
  •  1
  •   yantaq    11 年前

    下面是一个javascript函数,它使用自定义符号添加指定数量的填充。这个函数有三个参数。

        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"
    
    */
    
        24
  •  1
  •   Marco Demaio    10 年前
    /**************************************************************************************************
    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 "
    
        25
  •  1
  •   qwertzguy    10 年前

    如果你只想一个非常简单的黑一行填充,只需做一个字符串所需的最大填充长度的填充字符,然后子字符串的长度,你想填充。

    示例:填充存储在 e 空格长度为25个字符。

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

    结果: "hello "

    如果你想对输入的数字做同样的操作,只需调用 .toString() 在它之前。

        26
  •  1
  •   Jeremiah    10 年前

    又一个结合了两种解决方案的尝试

    /**
     * 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
    };    
    
        27
  •  1
  •   Travis J    9 年前

    一个朋友问起使用javascript函数向左填充。这变成了我们中的一些人之间的一个小小的努力,在聊天代码高尔夫它。结果是:

    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。下面是一个示例集:

    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 />"));
        28
  •  1
  •   user5925630    8 年前

    有点晚了,不过我还是想和你分享一下。我发现向对象添加原型扩展非常有用。这样我就可以左键或右键输入数字和字符串。我有一个模块与我的脚本中包含的类似实用程序。

    // 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;
        }
    };
    
        29
  •  1
  •   StanE    8 年前
    1. 永远不要在某处插入数据(尤其不要在开头插入,比如 str = pad + str; ,因为每次都会重新分配数据。总是在结尾附加!
    2. 不要把你的绳子放在圈里。别管它,先做你的垫子。最后将它与主字符串连接起来。
    3. 不要每次都指定填充字符串(比如 str += pad; )将填充字符串附加到自身并提取第一个x-char要快得多(如果从第一个char提取,解析器可以有效地执行此操作)。这是指数增长,这意味着它会暂时浪费一些内存(你不应该对非常大的文本这样做)。

    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);
        }
    }
        30
  •  1
  •   Rafael Andrs Cspedes Basterio    6 年前

    使用padstart

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

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