pad với các giá trị mặc định
Tôi nhận thấy rằng tôi chủ yếu cần padLeft để chuyển đổi thời gian / đệm số
vì vậy tôi đã viết chức năng này
function padL(a,b,c){//string/number,length=2,char=0
return (new Array(b||2).join(c||0)+a).slice(-b)
}
Hàm đơn giản này hỗ trợ Số hoặc Chuỗi làm đầu vào
pad mặc định là 2 ký tự
char mặc định là 0
vì vậy tôi chỉ có thể viết
padL(1);
// 01
nếu tôi thêm đối số thứ hai (chiều rộng pad)
padL(1,3);
// 001
tham số thứ ba (pad char)
padL('zzz',10,'x');
// xxxxxxxzzz
EDIT
@BananaAcid nếu bạn chuyển một giá trị không xác định hoặc chuỗi có độ dài 0 bạn nhận được 0undefined
..so:
như đề xuất
function padL(a,b,c){//string/number,length=2,char=0
return (new Array((b||1)+1).join(c||0)+(a||'')).slice(-(b||2))
}
nhưng điều này cũng có thể đạt được một cách ngắn gọn hơn.
function padL(a,b,c){//string/number,length=2,char=0
return (new Array(b||2).join(c||0)+(a||c||0)).slice(-b)
}
cũng hoạt động với:
padL(0)
padL(NaN)
padL('')
padL(undefined)
padL(false)
Và nếu bạn muốn có thể đệm theo cả hai cách:
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)
}
có thể được viết theo cách ngắn hơn mà không cần sử dụng lát.
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
)
*/
bây giờ nếu bạn cố gắng 'averylongword' với 2 ... đó không phải là vấn đề của tôi.
Nói rằng tôi cho bạn một lời khuyên.
Hầu hết thời gian nếu bạn đệm bạn làm điều đó cho cùng một giá trị N lần.
Sử dụng bất kỳ loại chức năng nào trong một vòng lặp làm chậm vòng lặp !!!
Vì vậy, nếu bạn chỉ muốn để lại một số con số trong một danh sách dài, đừng sử dụng các hàm để làm điều đơn giản này.
sử dụng một cái gì đó như thế này:
var arrayOfNumbers=[1,2,3,4,5,6,7],
paddedArray=[],
len=arrayOfNumbers.length;
while(len--){
paddedArray[len]=('0000'+arrayOfNumbers[len]).slice(-4);
}
nếu bạn không biết kích thước đệm tối đa dựa trên các số bên trong mảng.
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"
*/