Appearance
2796. 重复字符串
ts
String.prototype.replicate = function (times) {
return Array.from({ length: times }, () => this).join('')
}ES6 之前的常见实现
String.prototype.repeat 是 ES6 引入的原生方法。在此之前,重复字符串的常见写法正是创建数组再 join。
Array.from({ length: times }, () => this) 创建了一个长度为 times 的数组,每个元素都是原字符串的引用。然后用 join('') 拼接——因为 join 用空字符串作为分隔符,所以结果是原字符串重复 times 次。
为什么用 join 而不是循环拼接
在早期的 JavaScript 引擎中,字符串是不可变的,每次 += 都会创建新字符串。对于大 times,循环拼接会导致 O(N²) 的复制开销。join 的实现(C 层)可以一次性分配目标内存再填充,避免了中间字符串对象的反复创建。
现代引擎对 += 的优化很激进(V8 的字符串 rope 等),但对于大数据量,join 仍然是更安全的选择。
边界
times = 0→ 返回空字符串(Array.from({ length: 0 })返回[],[].join('')返回"")times < 0→ 原生repeat会抛 RangeError,这个实现返回空字符串times不是整数 →Array.from的 length 会被截断为整数
