在Perl中,我可以使用以下语法多次重复一个字符:

$a = "a" x 10; // results in "aaaaaaaaaa"

有没有一种简单的方法在Javascript中实现这一点?我显然可以使用一个函数,但我想知道是否有内置的方法,或者其他一些巧妙的技术。


当前回答

如果您不反对在项目中包含库,lodash有一个repeat函数。

_.repeat('*', 3);
// → '***

https://lodash.com/docs#repeat

其他回答

Lodash提供了与Javascript repeat()函数类似的功能,这在所有浏览器中都不可用。它名为_.repeat,从3.0.0版开始提供:

_.repeat('a', 10);

在一个新的ES6和声中,你将有自己的方法来重复。此外,ES6目前只是实验性的,该功能已在Edge、FF、Chrome和Safari中提供

"abc".repeat(3) // "abcabcabc"

当然,如果重复功能不可用,您可以使用旧的好数组(n+1).join(“abc”)

/**  
 * Repeat a string `n`-times (recursive)
 * @param {String} s - The string you want to repeat.
 * @param {Number} n - The times to repeat the string.
 * @param {String} d - A delimiter between each string.
 */

var repeat = function (s, n, d) {
    return --n ? s + (d || "") + repeat(s, n, d) : "" + s;
};

var foo = "foo";
console.log(
    "%s\n%s\n%s\n%s",

    repeat(foo),        // "foo"
    repeat(foo, 2),     // "foofoo"
    repeat(foo, "2"),   // "foofoo"
    repeat(foo, 2, "-") // "foo-foo"
);

另一种选择是:

for(var word = ''; word.length < 10; word += 'a'){}

如果需要重复多个字符,请乘以条件:

for(var word = ''; word.length < 10 * 3; word += 'foo'){}

注意:您不必像word=Array(11)那样超出1。join('a')

为了好玩,这里有另一种方法,使用toFixed()来格式化浮点数。

通过做

(0).toFixed(2)
(0).toFixed(3)
(0).toFixed(4)

我们得到

0.00
0.000
0.0000

如果前两个字符为0。我们可以使用这个重复模式来生成任何重复。

函数重复(str,nTimes){return(0).toFixed(n次).substr(2).replaceAll(“0”,str);}console.info(重复('3',5));console.info(重复('hello',4));