Итак, мой вопрос был задан кем-то еще в его форме Java здесь: Java - создайте новый экземпляр String с заданной длиной и заполненный определенным символом. Лучшее решение?
, , , но я ищу его эквивалент JavaScript.
По сути, я хочу динамически заполнять текстовые поля символами «#», основываясь на атрибуте «maxlength» каждого поля. Таким образом, если вход имеет maxlength="3"
, то поле будет заполнено "###".
В идеале должно быть что-то похожее на Java StringUtils.repeat("#", 10);
, но пока лучший вариант, который я могу придумать, - это циклически проходить и добавлять символы «#», по одному, пока не будет достигнута максимальная длина. Я не могу избавиться от ощущения, что есть более эффективный способ сделать это, чем это.
Любые идеи?
К вашему сведению - я не могу просто установить значение по умолчанию на входе, потому что символы "#" необходимо очистить в фокусе, и, если пользователь не ввел значение, его нужно будет "пополнить" при размытии. Это «заправка» шаг, который меня интересует
источник
Ответы:
Лучший способ сделать это (что я видел) это
Это создает массив с заданной длиной, а затем соединяет его с заданной строкой для повторения.
.join()
Функция чтит длину массива , независимо от того , имеют ли элементы значения , присвоенное и неопределенные значения отображаются как пустые строки.Вы должны добавить 1 к желаемой длине, потому что строка разделителя идет между элементами массива.
источник
parseInt()
на входе значение максимальной длины, прежде чем использовать его для размера массива. Как раз то, что я искал. , , Спасибо!repeat
функция, встроенная в String.prototype, обрабатывает это сейчас (ES6 +)Попробуйте это: P
источник
_.repeat('*',10);
repeat()
метод. С нетерпением жду того дня, когда я больше не буду заботиться о них. , ,К сожалению, хотя упомянутый здесь подход Array.join является кратким, он примерно в 10 раз медленнее, чем реализация на основе конкатенации строк. Особенно плохо он работает на больших струнах. Смотрите ниже полную информацию о производительности.
В Firefox, Chrome, Node.js MacOS, Node.js Ubuntu и Safari самая быстрая реализация, которую я тестировал, была:
Это многословно, поэтому, если вам нужна краткая реализация, вы можете пойти наивным подходом; он по-прежнему работает лучше от 2 до 10 раз, чем подход Array.join, а также быстрее, чем реализация удвоения для небольших входов. Код:
Дальнейшая информация:
источник
Я хотел бы создать постоянную строку, а затем вызвать подстроку на нем.
Что-то вроде
Немного быстрее тоже.
http://jsperf.com/const-vs-join
источник
ES2015 самый простой способ сделать что-то вроде
'X'.repeat(data.length)
X
быть любой строкой,data.length
быть желаемой длины.см .: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat
источник
Отличным вариантом ES6 будет
padStart
пустая строка. Как это:Примечание: это не будет работать в IE (без полифилла).
источник
s = '#'.repeat(10)
) из ответа @ user4227915 выше?Версия, которая работает во всех браузерах
Эта функция делает то, что вы хотите, и работает намного быстрее, чем опция, предложенная в принятом ответе:
Вы используете это так:
Чтобы сравнить производительность этой функции с опцией, предложенной в принятом ответе, см. Эту скрипку и эту скрипку для эталонных тестов.
Версия только для современных браузеров
В современных браузерах вы также можете сделать это:
Этот вариант еще быстрее. Однако, к сожалению, это не работает ни в одной версии Internet Explorer.
Числа в таблице указывают первую версию браузера, которая полностью поддерживает метод:
источник
Вы также можете добавить полифилл для повтора для старых браузеров
источник
Основано на ответах от Hogan и Zero Trick Pony. Я думаю, что это должно быть достаточно быстрым и гибким, чтобы хорошо обрабатывать большинство случаев использования
источник
Вы можете использовать первую строку функции как однострочную, если вам нравится:
источник