- npm left-pad 的实现,此包已被删除
function leftpad(str, len, ch) {
str = String(str);
var i = -1;
if(!ch && ch !== 0) ch = " ";
len = len - str.length;
while(++i < len) {
str = ch + str;
}
return str;
}
- 使用数组实现
function leftpad(str, len, ch){
if(!ch && ch !== 0) ch = ' ';
len = len - str.length;
return Array(len).join(ch) + str;
}
- 用类数组实现,避免创建数组
var _join = Array.prototype.join
function leftpad(str, len, ch) {
if(!ch && ch !== 0) ch = " ";
len = len - str.length;
return _join.call({length: len}, ch) + str;
}
- 二分法
function leftpad(str, len, ch) {
if(!ch && ch !== 0) ch = ' ';
len = len - str.length;
var total = '';
while(true) {
// 基数, total 多加 1个ch
if (len % 2 == 1) total += ch;
if (len === 1) return total + str;
// 每次ch都变成 chch
ch += ch;
// 长度减半
len = parseInt(len / 2);
}
}
// 用位运算优化性能 // 20 -> 10 -> 5 -> 2 => 1
function leftpad(str, len, ch) {
if(!ch && ch !== 0) ch = ' ';
len = len - str.length;
var total = '';
while(true) {
// 基数, total 多加 1个ch
if (len & 1 == 1) total += ch;
if (len === 1) return total + str;
// 每次ch都变成 chch
ch += ch;
// 长度减半
len = len >> 1; // 每次长度减半
}
}
- 参考论 leftpad的实现