所以,我的问题已经被其他人以Java形式在这里问了:Java -创建一个新的字符串实例,具有指定的长度和填充特定的字符。最好的解决方案?

……但我正在寻找它的JavaScript等效。

基本上,我想动态填充文本字段与“#”字符,基于每个字段的“maxlength”属性。因此,如果一个输入有maxlength="3",那么该字段将被"###"填充。

理想情况下,应该有类似Java StringUtils的东西。repeat("#", 10);,但是,到目前为止,我能想到的最好的选择是循环遍历和追加"#"字符,一次一个,直到达到最大长度。我总觉得还有比这更有效的方法。

什么好主意吗?

供您参考-我不能简单地在输入中设置默认值,因为“#”字符需要在焦点上清除,并且,如果用户没有输入值,将需要在模糊上“重新填充”。我所关心的是“补充”步骤


当前回答

我会创建一个常量字符串,然后在它上面调用substring。

类似的

var hashStore = '########################################';

var Fiveup = hashStore.substring(0,5);

var Tenup = hashStore.substring(0,10);

也快了一点。

http://jsperf.com/const-vs-join

其他回答

适用于所有浏览器的版本

这个函数做你想要的,并且执行得比在接受的答案中建议的选项快得多:

var repeat = function(str, count) {
    var array = [];
    for(var i = 0; i <= count;)
        array[i++] = str;
    return array.join('');
}

你可以这样使用它:

var repeatedCharacter = repeat("a", 10);

要将此函数的性能与已接受答案中提出的选项的性能进行比较,请参阅此小提琴和此小提琴以获得基准测试。

版本仅适用于现代浏览器

在现代浏览器中,你现在也可以这样做:

var repeatedCharacter = "a".repeat(10) };

这个选项甚至更快。然而,不幸的是,它不能在任何版本的ie浏览器中运行。

表中的数字指定了完全支持该方法的第一个浏览器版本:

试一试:P

S = '#'.repeat(10) document.body.innerHTML = s

我会这么做

Buffer.alloc(length, character).toString()

如果你喜欢,你可以使用函数的第一行作为一行:

function repeat(str, len) {
    while (str.length < len) str += str.substr(0, len-str.length);
    return str;
}

ES2015最简单的方法是这样做

“X”.repeat (data.length)

X是任意字符串,数据。长度为期望的长度。

参见:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat