pad dengan nilai default
Saya perhatikan bahwa saya sebagian besar memerlukan padLeft untuk konversi waktu / nomor padding
jadi saya menulis fungsi ini
function padL(a,b,c){//string/number,length=2,char=0
return (new Array(b||2).join(c||0)+a).slice(-b)
}
Fungsi sederhana ini mendukung Angka atau String sebagai input
pad default adalah 2 karakter
karakter default adalah 0
jadi saya bisa menulis
padL(1);
// 01
jika saya menambahkan argumen kedua (lebar pad)
padL(1,3);
// 001
parameter ketiga (pad char)
padL('zzz',10,'x');
// xxxxxxxzzz
EDIT
@BananaAcid jika Anda memberikan nilai yang tidak ditentukan atau string 0 panjang yang Anda dapatkan 0undefined
..so:
seperti yang disarankan
function padL(a,b,c){//string/number,length=2,char=0
return (new Array((b||1)+1).join(c||0)+(a||'')).slice(-(b||2))
}
tetapi ini juga bisa dicapai dengan cara yang lebih singkat.
function padL(a,b,c){//string/number,length=2,char=0
return (new Array(b||2).join(c||0)+(a||c||0)).slice(-b)
}
bekerja juga dengan:
padL(0)
padL(NaN)
padL('')
padL(undefined)
padL(false)
Dan jika Anda ingin dapat menggunakan keduanya:
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)
}
yang dapat ditulis dengan cara yang lebih singkat tanpa menggunakan 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
)
*/
sekarang jika Anda mencoba untuk pad 'averylongword' dengan 2 ... itu bukan masalah saya.
Mengatakan bahwa saya memberi Anda tip.
Sebagian besar waktu jika Anda pad Anda melakukannya untuk nilai yang sama N kali.
Menggunakan semua jenis fungsi di dalam sebuah loop memperlambat loop !!!
Jadi jika Anda hanya ingin memasukkan beberapa angka di dalam daftar yang panjang jangan gunakan fungsi untuk melakukan hal sederhana ini.
gunakan sesuatu seperti ini:
var arrayOfNumbers=[1,2,3,4,5,6,7],
paddedArray=[],
len=arrayOfNumbers.length;
while(len--){
paddedArray[len]=('0000'+arrayOfNumbers[len]).slice(-4);
}
jika Anda tidak tahu bagaimana ukuran bantalan maksimum berdasarkan angka-angka di dalam array.
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"
*/