如何创建一个包含n个字符的字符串?如何创建具有特定长度的字符串?

时间:2013-06-02 17:21:02

标签: javascript string

我正在编写JavaScript单元测试,我需要创建一个长度为65536的字符串。 在JavaScript中执行此操作的最佳方法是什么?

目前我正在使用:

var myString = '';
for (var i = 0; i <= 65535; ++i) {
    myString += 'x';
}

5 个答案:

答案 0 :(得分:34)

怎么样

Array(65537).join('x')

注意,它是65537,而不是65536,因为你把字符放在中间。

答案 1 :(得分:27)

这是一个前瞻性的答案,并不适用于当前的实施。

ECMAScript 6目前正在定义String.prototype.repeat方法。这将允许您:

var result = "x".repeat(65535);

同样,这是未来的补充。目前正在起草ECMAScript 6(Harmony),这在技术上可以删除,但似乎不太可能。

目前的草案:

  

15.5.4.21 String.prototype.repeat(count)

     

采取以下步骤:

     
      
  1. O成为CheckObjectCoercible(this value)
  2.   
  3. S成为ToString(O)
  4.   
  5. ReturnIfAbrupt(S)
  6.   
  7. n成为调用ToInteger(count)
  8. 的结果   
  9. ReturnIfAbrupt(n)
  10.   
  11. 如果n < 0,则抛出RangeError异常。
  12.   
  13. 如果n+Infinity,则抛出RangeError异常。
  14.   
  15. TString值,该n值来自附加在一起的Sn副本。如果0T,则T为空字符串。
  16.   
  17. 返回{{1}}。
  18.         

    注1:此方法创建一个由重复此对象(转换为String)的字符串元素组成的String   算上时间。

         

    注2:重复功能是有意通用的;它不要求它的这个值是一个String对象。因此,它可以转移到其他类型的对象以用作方法。

答案 2 :(得分:8)

不必在数组上调用

Array.prototype.join,只需使用长度属性调用对象(在谷歌Chrome,FireFox,IE10)

function makeStr(len, char) {
    return Array.prototype.join.call({length: (len || -1) + 1}, char || 'x');
}
makeStr(5); // "xxxxx"

这使您可以从制作字符串的本机函数中受益,而无需大量数组的开销。

答案 3 :(得分:4)

出于兴趣,我在jsperf.com上创建了一个快速基准测试:

http://jsperf.com/mkstring

参赛者

  1. 数组(x).join()

  2. 由Paul S发布的Array.prototype.join。

  3. 来自underscore.string

  4. 的strRepeat

    &#13;
    &#13;
    function strRepeat(str, qty) {
      if (qty < 1) return '';
      var result = '';
      while (qty > 0) {
        if (qty & 1) result += str;
        qty >>= 1, str += str;
      }
      return result;
    }
    
    strRepeat('*', 20000);
    &#13;
    &#13;
    &#13;

    1. Crayz Train提到的EMCAScript 6 String.repeat
    2. 对于Firefox 34(已经支持ECMAScript6 String.repeat),原生重复最快,然后是strRepeat。

      有趣的是,对于Chrom(e | ium)39,与我在测试运行中的Firefox的原生String.repeat函数相比,strRepeat函数更快。

      对于所有经过测试的浏览器,Paul S.使用本机Array.join方法提出的函数比underscore.string库的strRepeat函数慢。因此,如果您正在寻找快速方法,请不要使用它。

答案 4 :(得分:0)

您可以根据需要创建一个长度数组,然后在数组上使用join()方法将其转换为字符串。 Array(number).join(char)这会创建一个大小为number -1的数组。另请注意,您不希望使用您的方法,因为连接字符串非常昂贵(O(n)每个concat)。我不确定javascript是否有类似java的StringBuilder