返回任意次数的字符串的最佳或最简洁的方法是什么?
以下是我目前为止拍得最好的照片:
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('');
}
当前回答
基于数字连接字符串。
function concatStr(str, num) {
var arr = [];
//Construct an array
for (var i = 0; i < num; i++)
arr[i] = str;
//Join all elements
str = arr.join('');
return str;
}
console.log(concatStr("abc", 3));
希望有帮助!
其他回答
新读者注意:这个答案很老,而且不太实用——它只是“聪明”,因为它使用Array的东西来获取 串事情做完了。当我写“更少的过程”时,我肯定是指 “更少的代码”,因为,正如其他人在随后的回答中指出的那样,它 表演像猪一样。所以如果你看重速度就不要用它。
我将把这个函数直接放到String对象上。与其创建一个数组,填充它,然后用一个空字符连接它,不如创建一个适当长度的数组,然后用你想要的字符串连接它。同样的结果,更少的过程!
String.prototype.repeat = function( num )
{
return new Array( num + 1 ).join( this );
}
alert( "string to repeat\n".repeat( 4 ) );
基于数字连接字符串。
function concatStr(str, num) {
var arr = [];
//Construct an array
for (var i = 0; i < num; i++)
arr[i] = str;
//Join all elements
str = arr.join('');
return str;
}
console.log(concatStr("abc", 3));
希望有帮助!
这是JSLint的安全版本
String.prototype.repeat = function (num) {
var a = [];
a.length = num << 0 + 1;
return a.join(this);
};
简单的递归连接
我只是想试一试,然后做了这个:
function ditto( s, r, c ) {
return c-- ? ditto( s, r += s, c ) : r;
}
ditto( "foo", "", 128 );
我不能说我想得太多,它可能表明:-)
可以说这样更好
String.prototype.ditto = function( c ) {
return --c ? this + this.ditto( c ) : this;
};
"foo".ditto( 128 );
这很像已经发布的答案-我知道。
但为什么要递归呢?
还有一点默认行为呢?
String.prototype.ditto = function() {
var c = Number( arguments[ 0 ] ) || 2,
r = this.valueOf();
while ( --c ) {
r += this;
}
return r;
}
"foo".ditto();
因为,尽管非递归方法将处理任意大的重复而不达到调用堆栈限制,但它要慢得多。
为什么我要费心添加更多的方法,而这些方法还不及已经发布的那些方法的一半聪明呢?
一部分是为了自娱自乐,一部分是为了用最简单的方式指出,我知道剥猫皮的方法有很多种,根据具体情况,显然最好的方法很可能并不理想。
一个相对快速和复杂的方法可能会在某些情况下有效地崩溃和烧毁,而一个更慢,更简单的方法可能最终会完成工作。
有些方法可能只是利用漏洞,因此很容易被修复而不复存在,而其他方法可能在所有条件下都工作得很好,但构造得太复杂,以至于人们根本不知道它是如何工作的。
“就算我不知道它是怎么工作的又怎样?!”
严重吗?
JavaScript有一个最大的优势;它对不良行为具有高度的容忍度,而且非常灵活,它会竭尽全力地返回结果,而如果它崩溃了,可能对每个人都更好!
“能力越大,责任越大”;-)
但更严肃和重要的是,尽管像这样的一般问题确实会以聪明的答案形式带来令人生畏的东西,如果没有其他的话,扩展了一个人的知识和视野,最终,手头的任务-使用结果方法的实际脚本-可能需要比建议的更少或更聪明一点。
这些“完美”的算法很有趣,但“一刀切”很少会比量身定制更好。
这篇布道是由于你睡眠不足和一时兴趣所致。 开始编码吧!
function repeat(s, n) { var r=""; for (var a=0;a<n;a++) r+=s; return r;}