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

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

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


当前回答

如今,重复字符串方法几乎在所有地方都得到了实现。(它不在Internet Explorer中。)因此,除非您需要支持较旧的浏览器,否则只需编写:

"a".repeat(10)

在重复之前,我们使用了这个黑客:

Array(11).join("a") // create string with 10 a's: "aaaaaaaaaa"

(注意,长度为11的数组只能得到10个“a”,因为array.join将参数放在数组元素之间。)

西蒙还指出,根据这个基准,在Safari和Chrome(而不是Firefox)中,通过简单地使用for循环追加一个字符来重复多次似乎更快(虽然有点不那么简洁)。

其他回答

Array(10).fill('a').join('')

尽管投票最多的答案有点紧凑,但使用这种方法,您不必添加额外的数组项。

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

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

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

对于重复项目中的值,我使用repeat

例如:

var n = 6;
for (i = 0; i < n; i++) {
    console.log("#".repeat(i+1))
}

但要小心,因为该方法已添加到ECMAScript 6规范中。

另一种快速重复n个字符的有趣方法是使用快速求幂算法的思想:

var repeatString = function(string, n) {
    var result = '', i;

    for (i = 1; i <= n; i *= 2) {
        if ((n & i) === i) {
            result += string;
        }
        string = string + string;
    }

    return result;
};

也可用作一个衬垫:

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