Мне нужна функция 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>
Но я понятия не имею, какого черта это делает, и это, кажется, не работает для меня.
javascript
string
Энтони Поттс
источник
источник
Ответы:
Я нашел это решение здесь, и это для меня намного проще:
И здесь я сделал расширение для строкового объекта:
Пример его использования:
Это вернет время в формате "15:30"
источник
String
библиотекиString.padStart()
иString.padEnd()
для заполнения слева / справа.Более быстрый метод
Если вы делаете это многократно, например, для заполнения значений в массиве, и производительность является фактором, следующий подход может дать вам почти 100-кратное преимущество по скорости ( jsPerf ) по сравнению с другими решениями, которые в настоящее время обсуждаются на веб-узлах . Основная идея заключается в том, что вы предоставляете функции pad полностью заполненную пустую строку для использования в качестве буфера. Функция pad просто добавляет строку для добавления к этой предварительно дополненной строке (одна строка concat), а затем разрезает или обрезает результат до желаемой длины.
Например, чтобы обнулить число до 10 цифр,
Чтобы заполнить строку пробелом, чтобы вся строка составляла 255 символов,
Тест производительности
Смотрите тест jsPerf здесь .
И это также быстрее, чем ES6
string.repeat
в 2 раза, как показано в пересмотренном JsPerf здесьисточник
string.repeat
метод ES6 . Так что, если вы делаете много строковых отступов, обязательно попробуйте это.http://www.webtoolkit.info/javascript_pad.html
Это намного более читабельно.
источник
pad("hello", 20) = "hello "
Вот рекурсивный подход к этому.
Пример...
источник
String.prototype.padStart()
иString.prototype.padEnd()
в настоящее время являются кандидатами на участие в TC39: см. github.com/tc39/proposal-string-pad-start-end (доступно только в Firefox по состоянию на апрель 2016 года; доступен полифилл ).источник
myString.padStart(padLength [, padString])
иmyString.padEnd(padLength [, padString])
ECMAScript 2017 добавляет метод padStart в прототип String. Этот метод дополняет строку пробелами до заданной длины. Этот метод также принимает необязательную строку, которая будет использоваться вместо пробелов для заполнения.
Также был добавлен метод padEnd, который работает таким же образом.
Для совместимости браузера (и полезного полифилла) смотрите эту ссылку .
источник
Используя метод String # repeat в ECMAScript 6 , функция pad так же проста, как:
String#repeat
в настоящее время поддерживается только в Firefox и Chrome. для другой реализации можно рассмотреть следующий простой полифилл:источник
Используя метод String # repeat и Arrow метода ECMAScript 6, функция pad очень проста:
jsfiddle
редактировать: предложение из комментариев:
таким образом, он не выдаст ошибку, когда
s.length
большеn
edit2: предложение из комментариев:
таким образом, вы можете использовать функцию как для строк, так и для не строк.
источник
s.length
больше, чемn
бросит. Предложить:let leftPad = (s, c, n) => n - s.length > 0 ? c.repeat(n - s.length) + s : s;
leftPad(12, ' ', 5)
. Строго говоря, я знаю, что все может быть в порядке, но, вероятно, это один из самых распространенных вариантов использования (заполнение чисел). Может бытьfunction leftPad(s, c, n) { s = s.toString(); return s.length > len ? s : c.repeat(n - s.length) + s; }
. Использованиеfunction
средства leftPad может быть внизу файла. В противном случае вы, вероятно,const
не должны использоватьvar
ниlet
.len
?len
должно бытьn
Ключевой трюк в обоих этих решениях заключается в создании
array
экземпляра с заданным размером (на единицу больше требуемой длины), а затем немедленном вызовеjoin()
метода для созданияstring
.join()
Метод передается Заполнительstring
(пробелы , вероятно). Поскольку полеarray
пусто, пустые ячейки будут отображаться как пустыеstrings
в процессе объединенияarray
в один результатstring
, и останется только заполнение. Это действительно хорошая техника.источник
пэд со значениями по умолчанию
Я заметил, что мне в основном нужен padLeft для преобразования времени / заполнения номера
так что я написал эту функцию
Эта простая функция поддерживает число или строку в качестве входных данных
пэд по умолчанию составляет 2 символа
значение по умолчанию - 0
так что я могу просто написать
если я добавлю второй аргумент (ширина площадки)
третий параметр (pad char)
РЕДАКТИРОВАТЬ @BananaAcid, если вы передаете неопределенное значение или строку длиной 0, которую вы получаете
0undefined
..so:как предложено
но это также может быть достигнуто в более короткие сроки.
работает также с:
И если вы хотите иметь возможность дополнять оба пути:
который может быть написан более коротким способом без использования среза.
Теперь, если вы попытаетесь дополнить 'averylongword' 2 ... это не моя проблема.
Сказал, что я дам вам совет.
Большую часть времени, если вы дополняете, вы делаете это для того же значения N раз.
Использование любого типа функции внутри цикла замедляет цикл !!!
Поэтому, если вы просто хотите добавить несколько цифр в длинный список, не используйте функции, чтобы сделать эту простую вещь.
используйте что-то вроде этого:
если вы не знаете, как максимальный размер заполнения на основе чисел внутри массива.
источник
return (new Array((b||1)+1).join(c||0)+(a||'')).slice(-(b||2))
, И как всегда: вы, ребята, не копируете код, который не понимаете.С ES8 есть два варианта заполнения.
Вы можете проверить их в документации.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
источник
Принимая идеи Самуила, здесь наверх. И помните старый SQL-скрипт, я попробовал с этим:
Это работает во всех случаях, которые я мог себе представить:
источник
строка дополнения была дополнена в новой версии JavaScript.
str.padStart(targetLength [, padString])
https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/padStart
Если вы хотите свою собственную функцию, проверьте этот пример:
источник
Вот простая функция, которую я использую.
Например:
источник
Короткий путь:
Пример:
возврат: "001234"
источник
String.prototype.padStart()
должно быть проще.На данный момент es7 - это просто проекты и предложения, но если вы хотите отслеживать совместимость со спецификацией, вам нужны следующие функции:
Из моей библиотеки polyfill, но примените свою собственную должную осмотрительность для расширений прототипов.
источник
Вот простой ответ в основном одной строки кода.
Убедитесь, что количество символов в заполнении, нули здесь, по крайней мере, равно минимальной длине. Таким образом, если выразить это в одну строку, получить результат «00035» в этом случае:
источник
Манипулирование массивами действительно медленное по сравнению с простым конкататом строк. Конечно, эталон для вашего случая использования.
источник
Вариант ответа @Daniel LaFavers .
Например:
источник
Сейчас 2014 год, и я предлагаю использовать функцию заполнения строк Javascript. Ха!
Голые кости: правая с пробелами
Fancy: накладка с опциями
Использование (фантазии):
источник
Если вы не возражаете против включения библиотеки утилит, библиотека lodash имеет функции _.pad, _.padLeft и _.padRight .
источник
Я думаю, что лучше избегать рекурсии, потому что это дорого.
источник
Вот функция JavaScript, которая добавляет указанное количество отступов с пользовательскими символами. функция принимает три параметра.
источник
И тогда вы можете сделать:
источник
Если вы хотите, чтобы очень простой хакерский однострочник дополнял, просто сделайте строку с нужным символом заполнения требуемой максимальной длины заполнения, а затем подставьте ее в длину, которую вы хотите заполнить.
Пример: заполнение хранилища строк
e
пробелами до 25 символов.Результат:
"hello "
Если вы хотите сделать то же самое с номером в качестве ввода, просто позвоните
.toString()
на него раньше.источник
Array(n).join(c)
для настройки длины и заполнения символов, напримерArray(26).join(' ')
.еще один подход с сочетанием нескольких решений
источник
Друг спросил об использовании функции JavaScript для заполнения слева. Это превратилось в небольшое усилие между некоторыми из нас в чате, чтобы написать код для игры в гольф. Это был результат:
Это гарантирует, что значение, которое будет дополнено, является строкой, и затем, если это не длина общей требуемой длины, оно будет дополнено одним разом, а затем рекурсивно. Вот как это выглядит с более логичным наименованием и структурой
Пример, который мы использовали, был для обеспечения того, чтобы числа были дополнены
0
слева, чтобы получить максимальную длину 6. Вот пример набора:источник
Немного опоздал, но подумал, что могу все равно поделиться. Я нашел полезным добавить прототип расширения для Object. Таким образом, я могу дополнять числа и строки, влево или вправо. У меня есть модуль с похожими утилитами, которые я включаю в свои скрипты.
~~~~~~~~~~~~ jsAddOns.js ~~~~~~~~~~~~
источник
str = pad + str;
), так как данные будут перераспределяться каждый раз. Добавить всегда в конце!str += pad;
). Гораздо быстрее добавить строку дополнения к себе и извлечь первые x-символы (синтаксический анализатор может сделать это эффективно, если вы извлекаете из первого символа). Это экспоненциальный рост, что означает, что он временно тратит часть памяти (вы не должны делать это с чрезвычайно большими текстами).источник
Вот мой дубль
Я не уверен в его производительности, но нахожу его гораздо более читабельным, чем другие варианты, которые я видел здесь ...
источник