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

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

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

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

什么好主意吗?

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


当前回答

一个很好的ES6选项是padStart一个空字符串。是这样的:

var str = ''.padStart(10, "#");

注意:这将不会在IE中工作(没有polyfill)。

其他回答

试一试:P

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

我会这么做

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

如果你需要的是性能(在ES6之前),那么substr和模板字符串的组合可能是最好的。这个函数是我用来创建空格填充字符串的,但是你可以将模板更改为任何你需要的:

function strRepeat(intLen, strTemplate) {
  strTemplate = strTemplate || "          ";
  var strTxt = '';
  while(intLen > strTemplate.length) {
    strTxt += strTemplate;
    intLen -= strTemplate.length;
  }
  return ((intLen > 0) ? strTxt + strTemplate.substr(0, intLen) : strTxt);
}

不幸的是,尽管数组。这里提到的join方法很简洁,它比基于字符串连接的实现慢了大约10倍。它在大弦上的表现尤其糟糕。有关完整的性能细节,请参见下面。

在Firefox、Chrome、Node.js MacOS、Node.js Ubuntu和Safari上,我测试的最快实现是:

function repeatChar(count, ch) {
    if (count == 0) {
        return "";
    }
    var count2 = count / 2;
    var result = ch;

    // double the input until it is long enough.
    while (result.length <= count2) {
        result += result;
    }
    // use substring to hit the precise length target without
    // using extra memory
    return result + result.substring(0, count - result.length);
};

这是冗长的,所以如果你想要一个简洁的实现,你可以使用朴素的方法;它的性能仍然比阵列好2倍到10倍。Join方法,并且对于小输入也比加倍实现更快。代码:

// naive approach: simply add the letters one by one
function repeatChar(count, ch) {
    var txt = "";
    for (var i = 0; i < count; i++) {
        txt += ch;
    }
    return txt;
}

进一步的信息:

在您自己的浏览器中运行速度测试 速度测试的完整源代码 速度测试结果

ES2015最简单的方法是这样做

“X”.repeat (data.length)

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

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