创建一个包含字母和字符串长度的字符串。

3

我想要根据字母和字符串长度创建一个字符串。这是我目前的代码,但有没有更好的方法?

function generate(letter, len) {
   var str = '';
   for (var i=0; i<len; i++) {
     str+=letter;
   }
  
   return str;
  
}


1
我认为这样的问题应该发布在https://codereview.stackexchange.com/上。 - Andreas Louv
取决于js环境(ES6 String.prototype.repeat),环境中可用的库,以及您对“更好”的理解。 - Xotic750
1个回答

4

不确定这种方法是否更好的性能,因为有些引擎会优化代码,而有些则不会。但是对于javascript程序员来说,这种方法易读。

您可以创建一个大小为len + 1的数组,然后将其按字母拼接起来。

为此,我们将使用数组构造函数,其中我们可以定义数组的大小,并利用Array.join将数组与给定的letter连接起来。

function generate(letter, len) {
    return new Array(len + 1).join(letter); 
}

1
这为什么更好?更快吗?我怀疑。更易读吗?这可以无限讨论。 - Andreas Louv
我认为在连接可能无限长度的字符串时,创建数组并不是更好的方法。因为你会在内存中创建一个对象,然后再将其连接起来,这样会消耗资源。使用“for循环”生成仍然是更好的方法。 - num8er
@AmitJoki 你不知道引擎(编译器/解释器)如何处理字符串拼接。也许它会使用类似于Java或C#中的StringBuilder。也许它会为每个字符串保留内存,并在使用完毕后再次释放。 - Andreas Louv
也许它会检查代码并创建一个长度为len的字符串,然后简单地将连接重写为str[i] = letter - Andreas Louv
@dev-null 在IE和Firefox中似乎已经检查过了,看起来他们优化了代码,而V8没有。顺便说一句,我的猜测是基于初始化了多少对象。当大多数引擎已经优化了大部分代码时,你有多频繁需要一个超快的函数呢?而且jsperf并不完美。我已经相应地编辑了我的答案。 - Amit Joki
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接