编语:最近热门话题木过于某人把自己的 Npm pkg 给 unpublish,导致一些依赖的大包都收到影响
正文:
首先:它是做什么的?
String left pad
在给定字符串前拼指定字符到指定长度
var leftpad = require(‘left-pad’)
// => ” foo”
leftpad(‘foo’, 5)
再看看这个包的源码:
module.exports = leftpad;
function leftpad (str, len, ch) {
str = String(str);
var i = -1;
ch || (ch = ‘ ‘);
len = len – str.length;
while (++i < len) {
str = ch + str;
}
return str;
}
来看看 baidu tangram 的类似的 pad 版本:
// 对目标数字进行 0 补齐
// 输出:00025
pad(25, 5)
// 1.5.1
function pad(source, length) {
var pre = “”,
negative = (source < 0),
string = String(Math.abs(source));
if (string.length < length) {
pre = (new Array(length – string.length + 1)).join(‘0’);
}
return (negative ? “-” : “”) + pre + string;
};
补 0 的 pad 方式:
function pad(val,len){
val = String(val);
len = len || 2;
while(val.length < len){
val = “0” + val;
}
return val;
}
比较简单的版本:
module.exports = function(str, width, char) {
char = char || ‘0’;
str = str.toString();
while (str.length < width) str = char + str;
return str;
};
参考 tangram 那种数组方式的版本:
function leftpad(str, len, ch){
str = ” + str;
var padLen = len – str.length;
if(padLen <= 0){
return str;
}else{
return (new Array(padLen + 1)).join((”+ch) || ‘ ‘) + str;
}
}
月影的方案:
function leftpad(str, len, ch){
str = ” + str;
if(!ch && ch !== 0) ch = ‘ ‘;
var padlen = len – str.length;
if(padlen <= 0) return str;
var padch = padlen & 1 ? ch : ”;
while(padlen >>= 1){
ch += ch;
if(padlen & 1){
padch += ch;
}
}
return padch + str;
}
一个热点其实里面还是有很多料的,比如:
- 如何把参数转字符串
- 如何使用数组这种神奇的类型
转自:DDFE