代码之家  ›  专栏  ›  技术社区  ›  Jee Mok ecanf

padStart的替代方法[重复]

  •  0
  • Jee Mok ecanf  · 技术社区  · 8 年前

    我需要一个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;
    };
    
    
    
    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)
    );
    0 回复  |  直到 5 年前
        1
  •  3
  •   Tanvir Islam Streame    5 年前

    我找到了这个解决方案 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”格式返回时间