repeat 方法:将一个字符串重复自身 N 次,如 repeat("ruby", 2) 得到 rubyruby。
版本1:利用空数组 join
function repeat(target, n) {
return new Array(n + 1).join(target);
}
版本2:类数组对象 + call
function repeat(target, n) {
return Array.prototype.join.call({ length: n + 1 }, target);
}
版本3:闭包缓存
var repeat = (function () {
var join = Array.prototype.join,
obj = {};
return function (target, n) {
obj.length = n + 1;
return join.call(obj, target);
};
})();
版本4:二分法
function repeat(target, n) {
var s = target,
total = [];
while (n > 0) {
if (n % 2 == 1) total[total.length] = s;
if (n == 1) break;
s += s;
n = n >> 1;
}
return total.join("");
}
版本7:递归(上乘方案)
function repeat(target, n) {
if (n == 1) return target;
var s = repeat(target, Math.floor(n / 2));
s += s;
if (n % 2) s += target;
return s;
}