在 Perl 中,我可以使用以下语法多次重复一个字符:
$a = "a" x 10; // results in "aaaaaaaaaa"
有没有一种简单的方法可以在 Javascript 中完成此操作?我显然可以使用一个函数,但我想知道是否有任何内置方法或其他一些聪明的技术。
在 Perl 中,我可以使用以下语法多次重复一个字符:
$a = "a" x 10; // results in "aaaaaaaaaa"
有没有一种简单的方法可以在 Javascript 中完成此操作?我显然可以使用一个函数,但我想知道是否有任何内置方法或其他一些聪明的技术。
这些天来,该repeat
字符串的方法来实现,几乎无处不在。(它不在 Internet Explorer 中。)所以除非您需要支持旧浏览器,否则您可以简单地编写:
"a".repeat(10)
之前repeat
,我们使用了这个 hack:
Array(11).join("a") // create string with 10 a's: "aaaaaaaaaa"
(请注意,长度为 11 的数组只能得到 10 个“a”,因为Array.join
将参数放在数组元素之间。)
Simon 还指出,根据这个基准测试,在 Safari 和 Chrome(但不是 Firefox)中,通过简单地使用 for 循环(虽然不太简洁)重复多次重复一个字符似乎更快。
如果你经常重复自己的话很方便:
String.prototype.repeat = String.prototype.repeat || function(n){
n= n || 1;
return Array(n+1).join(this);
}
alert( 'Are we there yet?\nNo.\n'.repeat(10) )
另一种选择是:
for(var word = ''; word.length < 10; word += 'a'){}
如果您需要重复多个字符,请乘以您的条件:
for(var word = ''; word.length < 10 * 3; word += 'foo'){}
注意:您不必像word = Array(11).join('a')
最有效的方式是https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat
简短版本如下。
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;
};
var a = "a";
console.debug(a.repeat(10));
Mozilla 的 Polyfill:
if (!String.prototype.repeat) {
String.prototype.repeat = function(count) {
'use strict';
if (this == null) {
throw new TypeError('can\'t convert ' + this + ' to object');
}
var str = '' + this;
count = +count;
if (count != count) {
count = 0;
}
if (count < 0) {
throw new RangeError('repeat count must be non-negative');
}
if (count == Infinity) {
throw new RangeError('repeat count must be less than infinity');
}
count = Math.floor(count);
if (str.length == 0 || count == 0) {
return '';
}
// Ensuring count is a 31-bit integer allows us to heavily optimize the
// main part. But anyway, most current (August 2014) browsers can't handle
// strings 1 << 28 chars or longer, so:
if (str.length * count >= 1 << 28) {
throw new RangeError('repeat count must not overflow maximum string size');
}
var rpt = '';
for (;;) {
if ((count & 1) == 1) {
rpt += str;
}
count >>>= 1;
if (count == 0) {
break;
}
str += str;
}
// Could we try:
// return Array(count + 1).join(this);
return rpt;
}
}