Skip to content
陈广亮的技术博客
Go back

JS repeat 方法的演变历史

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;
}

Share this post on:

Previous Post
Node forever 进程管理
Next Post
JS 实现排列组合数组