在 JavaScript 中重复某个字符串多次
在 Perl 中,我可以使用以下语法多次重复一个字符:
$a = "a" x 10; // results in "aaaaaaaaaa"
Is there a simple way to finish this in Javascript?显然我可以使用一个函数,但我想知道是否有任何内置方法或其他一些巧妙的技术。
In Perl I can repeat a character multiple times using the syntax:
$a = "a" x 10; // results in "aaaaaaaaaa"
Is there a simple way to accomplish this in Javascript? I can obviously use a function, but I was wondering if there was any built in approach, or some other clever technique.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(24)
如今,
重复
字符串方法几乎在任何地方都实现了。 (Internet Explorer 中没有。)因此,除非您需要支持较旧的浏览器,否则您可以简单地编写:在
repeat
之前,我们使用了这个技巧:(请注意,长度为11的数组只能得到10个“a”,因为 Array.join 将参数放在数组元素之间。)
Simon 还指出,根据 这个基准,看来在 Safari 和 Chrome(但不是 Firefox)中,通过简单地使用 for 循环附加来多次重复一个字符(尽管有点不太简洁),速度更快。
These days, the
repeat
string method is implemented almost everywhere. (It is not in Internet Explorer.) So unless you need to support older browsers, you can simply write:Before
repeat
, we used this hack:(Note that an array of length 11 gets you only 10 "a"s, since
Array.join
puts the argument between the array elements.)Simon also points out that according to this benchmark, it appears that it's faster in Safari and Chrome (but not Firefox) to repeat a character multiple times by simply appending using a for loop (although a bit less concise).
在新的 ES6 和谐中,您将可以使用 repeat 来执行此操作。另外,ES6 目前还只是实验性的,此功能已经可用 Edge、FF、Chrome 和 Safari
当然,如果重复功能不可用,您可以使用老式的
Array(n + 1).join("abc")
In a new ES6 harmony, you will have native way for doing this with repeat. Also ES6 right now only experimental, this feature is already available in Edge, FF, Chrome and Safari
And surely if repeat function is not available you can use old-good
Array(n + 1).join("abc")
如果你经常重复的话会很方便:
Convenient if you repeat yourself a lot:
尽管投票最多的答案更加紧凑,但使用这种方法您不必添加额外的数组项。
Although the most voted answer is a bit more compact, with this approach you don't have to add an extra array item.
另一种方法是:
如果您需要重复多个字符,请将条件相乘:
注意:您不必像
word = Array(11).join('a' 那样超出 1 )
An alternative is:
If you need to repeat multiple chars, multiply your conditional:
NOTE: You do not have to overshoot by 1 as with
word = Array(11).join('a')
最提高性能的方法是 https:/ /developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat
简短版本如下。
来自 Mozilla 的 Polyfill:
The most performance-wice way is https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat
Short version is below.
Polyfill from Mozilla:
如果您不反对在项目中包含库,lodash 有一个重复功能。
https://lodash.com/docs#repeat
If you're not opposed to including a library in your project, lodash has a repeat function.
https://lodash.com/docs#repeat
对于所有浏览器
以下函数的执行速度将比接受的答案中建议的选项快得多:
您可以像这样使用它:
要将此函数的性能与接受的答案中建议的选项的性能进行比较,请参阅这个小提琴和这个 Fiddle 用于基准测试。
仅适用于现代浏览器
在现代浏览器中,您现在可以使用
String.prototype.repeat
方法执行此操作:在 MDN。
此选项甚至更快。不幸的是,它不适用于任何版本的 Internet Explorer。表中的数字指定完全支持该方法的第一个浏览器版本:
For all browsers
The following function will perform a lot faster than the option suggested in the accepted answer:
You'd use it like this :
To compare the performance of this function with that of the option proposed in the accepted answer, see this Fiddle and this Fiddle for benchmarks.
For moderns browsers only
In modern browsers, you can now do this using
String.prototype.repeat
method:Read more about this method on MDN.
This option is even faster. Unfortunately, it doesn't work in any version of Internet explorer. The numbers in the table specify the first browser version that fully supports the method:
目前 96.39% 的浏览器支持
String.repeat()
。String.repeat()
is supported by 96.39% of browsers as of now.在 ES2015/ES6 中,您可以使用
"*".repeat(n)
因此,只需将其添加到您的项目中,就可以开始了。
In ES2015/ES6 you can use
"*".repeat(n)
So just add this to your projects, and your are good to go.
只是为了好玩,这是使用 toFixed(),用于格式化浮点数。
通过这样做,
我们得到
如果前两个字符
0.
被删除,我们可以使用这个重复模式来生成任何重复。Just for the fun of it, here is another way by using the toFixed(), used to format floating point numbers.
By doing
we get
If the first two characters
0.
are deleted, we can use this repeating pattern to generate any repetition.另一种快速重复n个字符的有趣方法是使用快速求幂算法的思想:
Another interesting way to quickly repeat n character is to use idea from quick exponentiation algorithm:
为了在我的项目中重复一个值,我使用重复
例如:
但要小心,因为此方法已添加到 ECMAScript 6 规范中。
For repeat a value in my projects i use repeat
For example:
but be careful because this method has been added to the ECMAScript 6 specification.
这是您如何调用函数并借助 Array() 和 join()
使用 Typescript 和 arrow fun
This is how you can call a function and get the result by the helps of Array() and join()
using Typescript and arrow fun
这是我使用的:
Here is what I use:
我意识到这不是一个受欢迎的任务,如果您需要重复字符串不是整数次数怎么办?
可以使用
repeat()
和slice ()
,具体方法如下:下面是缩短的版本:
I realize that it's not a popular task, what if you need to repeat your string not an integer number of times?
It's possible with
repeat()
andslice()
, here's how:And below a shortened version:
我将详细阐述 @bonbon 的回答。他的方法是一种“将 N 个字符附加到现有字符串”的简单方法,以防万一有人需要这样做。例如,由于 "a google" 是 1 后跟 100 个零。
注意:您必须将原始字符串的长度添加到条件中。
I'm going to expand on @bonbon's answer. His method is an easy way to "append N chars to an existing string", just in case anyone needs to do that. For example since "a google" is a 1 followed by 100 zeros.
NOTE: You do have to add the length of the original string to the conditional.
Lodash 提供与 Javascript Repeat() 函数并非在所有浏览器中都可用。它称为 _.repeat,自版本 3.0.0 起可用:
Lodash offers a similar functionality as the Javascript repeat() function which is not available in all browers. It is called _.repeat and available since version 3.0.0:
也可以用作单行:
Can be used as a one-liner too:
在咖啡脚本中:
In CoffeeScript: