使用默认值的填充
我注意到我主要需要padLeft进行时间转换/数字填充。
所以我写了这个函数:
function padL(a, b, c) { // string/number, length=2, char=0
return (new Array(b || 2).join(c || 0) + a).slice(-b)
}
这个简单的函数支持数字或字符串作为输入。
默认的pad是两个字符。
默认字符为0。
所以我可以简单地写:
padL(1);
// 01
如果我添加第二个参数(pad width):
padL(1, 3);
// 001
第三个参数(填充字符)
padL('zzz', 10, 'x');
// xxxxxxxzzz
@BananaAcid:如果你传递一个未定义的值或长度为0的字符串,你会得到0undefined,所以:
作为建议
function padL(a, b, c) { // string/number, length=2, char=0
return (new Array((b || 1) + 1).join(c || 0) + (a || '')).slice(-(b || 2))
}
但这也可以用更短的方式实现。
function padL(a, b, c) { // string/number, length=2, char=0
return (new Array(b || 2).join(c || 0) + (a || c || 0)).slice(-b)
}
它还适用于:
padL(0)
padL(NaN)
padL('')
padL(undefined)
padL(false)
如果你想用两种方式填充:
function pad(a, b, c, d) { // string/number, length=2, char=0, 0/false=Left-1/true=Right
return a = (a || c || 0), c = new Array(b || 2).join(c || 0), d ? (a + c).slice(0, b) : (c + a).slice(-b)
}
不用slice就可以写得更简洁。
function pad(a, b, c, d) {
return a = (a || c || 0) + '', b = new Array((++b || 3) - a.length).join(c || 0), d ? a+b : b+a
}
/*
Usage:
pad(
input // (int or string) or undefined, NaN, false, empty string
// default:0 or PadCharacter
// Optional
,PadLength // (int) default:2
,PadCharacter // (string or int) default:'0'
,PadDirection // (bolean) default:0 (padLeft) - (true or 1) is padRight
)
*/
现在如果你试着用2填充'averylongword'…那不是我的问题。
我说过我会给你小费。
大多数情况下,如果你填充,你会做N次相同的值。
在循环中使用任何类型的函数都会降低循环的速度!!
所以如果你只是想在一个长列表中填充一些数字,不要使用函数来做这个简单的事情。
可以这样说:
var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 7],
paddedArray = [],
len = arrayOfNumbers.length;
while(len--) {
paddedArray[len] = ('0000' + arrayOfNumbers[len]).slice(-4);
}
如果你不知道如何根据数组内的数字来确定最大填充大小。
var arrayOfNumbers = [1, 2, 3, 4, 5, 6, 7, 49095],
paddedArray = [],
len = arrayOfNumbers.length;
// Search the highest number
var arrayMax = Function.prototype.apply.bind(Math.max, null),
// Get that string length
padSize = (arrayMax(arrayOfNumbers) + '').length,
// Create a Padding string
padStr = new Array(padSize).join(0);
// And after you have all this static values cached start the loop.
while(len--) {
paddedArray[len] = (padStr + arrayOfNumbers[len]).slice(-padSize); // substr(-padSize)
}
console.log(paddedArray);
/*
0: "00001"
1: "00002"
2: "00003"
3: "00004"
4: "00005"
5: "00006"
6: "00007"
7: "49095"
*/