重复字符串 - Javascript

2022-08-30 00:17:04

返回重复任意次数的字符串的最佳或最简洁的方法是什么?

以下是我迄今为止最好的镜头:

function repeat(s, n){
    var a = [];
    while(a.length < n){
        a.push(s);
    }
    return a.join('');
}

答案 1

新读者须知:这个答案很旧,而且不是很实用 - 它只是“聪明”,因为它使用数组的东西来完成String的事情。当我写“更少的过程”时,我肯定是指“更少的代码”,因为正如其他人在随后的答案中指出的那样,它的表现就像一头猪。因此,如果速度对您很重要,请不要使用它。

我会直接将此函数放在 String 对象上。无需创建数组,填充它,然后用空字符连接它,只需创建一个适当长度的数组,然后将其与所需的字符串连接即可。相同的结果,更少的过程!

String.prototype.repeat = function( num )
{
    return new Array( num + 1 ).join( this );
}

alert( "string to repeat\n".repeat( 4 ) );

答案 2

我已经测试了所有建议方法的性能。

这是我得到的最快的变体

String.prototype.repeat = function(count) {
    if (count < 1) return '';
    var result = '', pattern = this.valueOf();
    while (count > 1) {
        if (count & 1) result += pattern;
        count >>= 1, pattern += pattern;
    }
    return result + pattern;
};

或作为独立功能:

function repeat(pattern, count) {
    if (count < 1) return '';
    var result = '';
    while (count > 1) {
        if (count & 1) result += pattern;
        count >>= 1, pattern += pattern;
    }
    return result + pattern;
}

它基于wnrph的算法。它真的很快。而且越大,与传统方法相比,它的速度就越快。countnew Array(count + 1).join(string)

我只改变了2件事:

  1. 替换为(清除一个明显的类型转换);pattern = thispattern = this.valueOf()
  2. 将检查从 prototypejs 添加到函数顶部,以排除在这种情况下不必要的操作。if (count < 1)
  3. 应用丹尼斯答案的优化(5-7%加速)

断续器

在这里为那些感兴趣的人创建了一个小小的性能测试场。

变量计数 ~ 0 ..100:

Performance diagram

量计数 = 1024:

Performance diagram

使用它,如果您可以:)