Есть ли функция JavaScript, которая может дополнить строку, чтобы получить определенную длину? - PullRequest
256 голосов
/ 22 апреля 2010

Мне нужна функция 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>

Но я понятия не имею, чточерт возьми, это делает, и это, кажется, не работает для меня.

Ответы [ 42 ]

0 голосов
/ 14 февраля 2017

Для чего-то подобного я мог бы создать однострочную функцию в той точке, где она необходима:

var padleft = (s,c,len) => { while(s.length < len) s = c + s; return s; }

Пример:

> console.log( padleft( '110', '0', 8) );
> 00000110
0 голосов
/ 31 января 2017

это моя версия функции:

function str_pad(str, size, char, right) {
    var s = str + "";
    while (s.length < size) {
        if (right) {
            s = s + char;
        } else {
            s = char + s;
        }
    }
    return s;
}
0 голосов
/ 04 ноября 2016

Один вкладыш, если вы хотите что-то компактное:

String.prototype.pad = function(len, chr){
        return((((new Array(len)).fill(chr)).join("") +this).substring(this.length));
}
0 голосов
/ 26 октября 2016

используйте повтор, было бы проще.

    var padLeft=function(str, pad, fw){
        return fw>str.length ? pad.repeat(fw-str.length)+str : str;
    }

вы можете использовать его как: padeLeft (origin-str, 0, 20)

0 голосов
/ 11 августа 2016

Как PHP:

const STR_PAD_RIGHT = 1;
const STR_PAD_LEFT = 0;
const STR_PAD_BOTH = 2;

/**
 * @see http://php.net/str_pad
 * @param mixed input 
 * @param integer length 
 * @param string string 
 * @param integer type 
 * @return string
 */
function str_pad(input, length, string, type) {
    if (type === undefined || (type !== STR_PAD_LEFT && type !== STR_PAD_BOTH)) {
        type = STR_PAD_RIGHT
    }

    if (input.toString().length >= length) {
         return input;
    } else {
        if (type === STR_PAD_BOTH) {
            input = (string + input + string);
        } else if (type == STR_PAD_LEFT) {
            input = (string + input);
        } else {
            input = (input + string);
        }

        return str_pad(input.toString(), length, string, type);
    }
}
0 голосов
/ 25 марта 2015
String.prototype.padLeft = function(pad) {
        var s = Array.apply(null, Array(pad)).map(function() { return "0"; }).join('') + this;
        return s.slice(-1 * Math.max(this.length, pad));
    };

использование:

  1. "123".padLeft(2) возвращает: "123"
  2. "12".padLeft(2) возвращает: "12"
  3. "1".padLeft(2) возвращает: "01"
0 голосов
/ 14 марта 2014
1. function
var _padLeft = function(paddingString, width, replacementChar) {
    return paddingString.length >= width ? paddingString : _padLeft(replacementChar + paddingString, width, replacementChar || ' ');
};

2. String prototype
String.prototype.padLeft = function(width, replacementChar) {
        return this.length >= width ? this.toString() : (replacementChar + this).padLeft(width, replacementChar || ' ');
};

3. slice
('00000' + paddingString).slice(-5)
0 голосов
/ 30 декабря 2014

Попробуйте это: -

function leftPad(number) {
     return (number < 9)?'0'+number:number;
}

//call like this
var month=3;
month=leftPad(month);//output:- month=04
0 голосов
/ 18 августа 2015

Мне нравится это делать, если вам когда-нибудь понадобится заполнить несколько символов или тегов (например, &nbsp;) для отображения:

$.padStringLeft = function(s, pad, len) {
    if(typeof s !== 'undefined') {
        var c=s.length; while(len > c) {s=pad+s;c++;}
    }
    return s;
}    

$.padStringRight = function(s, pad, len) {
    if(typeof s !== 'undefined') {
        var c=s.length; while(len > c) {s += pad;c++;}
    }
    return s;
}
0 голосов
/ 26 августа 2015

моя комбинация вышеуказанных решений добавлена ​​в мою, постоянно развивающуюся версию:)

//in preperation for ES6
String.prototype.lpad || (String.prototype.lpad = function( length, charOptional )
{
    if (length <= this.length) return this;
    return ( new Array((length||0)+1).join(String(charOptional)||' ') + (this||'') ).slice( -(length||0) );
});


'abc'.lpad(5,'.') == '..abc'
String(5679).lpad(10,0) == '0000005679'
String().lpad(4,'-') == '----' // repeat string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...