返回任意次数的字符串的最佳或最简洁的方法是什么?
以下是我目前为止拍得最好的照片:
function repeat(s, n){
var a = [];
while(a.length < n){
a.push(s);
}
return a.join('');
}
返回任意次数的字符串的最佳或最简洁的方法是什么?
以下是我目前为止拍得最好的照片:
function repeat(s, n){
var a = [];
while(a.length < n){
a.push(s);
}
return a.join('');
}
当前回答
这个很有效
String.prototype.repeat = function(times){
var result="";
var pattern=this;
while (times > 0) {
if (times&1)
result+=pattern;
times>>=1;
pattern+=pattern;
}
return result;
};
其他回答
这可能是最小的递归:-
String.prototype.repeat = function(n,s) {
s = s || ""
if(n>0) {
s += this
s = this.repeat(--n,s)
}
return s}
小提琴:http://jsfiddle.net/3Y9v2/
function repeat(s, n){
return ((new Array(n+1)).join(s));
}
alert(repeat('R', 10));
适用于所有浏览器
这是最简洁的:
function repeat(s, n) { return new Array(n+1).join(s); }
如果你也关心性能,这是一个更好的方法:
function repeat(s, n) { var a=[],i=0;for(;i<n;)a[i++]=s;return a.join(''); }
如果要比较这两个选项的性能,请参阅此Fiddle和此Fiddle以获得基准测试。在我自己的测试中,第二个选项在Firefox中大约快2倍,在Chrome中大约快4倍!
仅适用于现代浏览器:
在现代浏览器中,你现在也可以这样做:
function repeat(s,n) { return s.repeat(n) };
这个选项不仅比其他两个选项都要短,而且比第二个选项还要快。
不幸的是,它不能在任何版本的ie浏览器中运行。表中的数字指定了完全支持该方法的第一个浏览器版本:
只是另一个重复函数:
function repeat(s, n) {
var str = '';
for (var i = 0; i < n; i++) {
str += s;
}
return str;
}
disfated的答案提高了5-7%。
通过在计数> 1处停止来展开循环,并在循环之后执行额外的result += pattnern concat。这将避免循环最终使用以前未使用的模式+=模式,而不必使用昂贵的if检查。 最终的结果是这样的:
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;
}
result += pattern;
return result;
};
下面是disfate的小提琴分叉的展开版本:http://jsfiddle.net/wsdfg/