Существует ли функция JavaScript, которая может заполнить строку для получения до решительной длины?

Я нуждаюсь в функции 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>

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

262
задан Mohd 27 August 2017 в 00:38
поделиться

2 ответа

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;

}

Это намного удобнее.

49
ответ дан 23 November 2019 в 02:33
поделиться

Ключевой уловкой в ​​обоих этих решениях является создание экземпляра массива с заданным размером (на единицу больше, чем желаемая длина), а затем немедленно вызвать метод join () для создания строки . В метод join () передается строка заполнения (возможно, пробелы). Поскольку массив пуст, пустые ячейки будут отображаться как пустые строки в процессе объединения массива в одну строку результата , и останется только заполнение. Это действительно хорошая техника.

14
ответ дан 23 November 2019 в 02:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: