แผ่นที่มีค่าเริ่มต้น
ฉันสังเกตเห็นว่าฉันต้องการ padLeft เป็นส่วนใหญ่สำหรับการแปลงเวลา / การเติมเต็มจำนวน
ดังนั้นฉันจึงเขียนฟังก์ชั่นนี้
function padL(a,b,c){//string/number,length=2,char=0
return (new Array(b||2).join(c||0)+a).slice(-b)
}
ฟังก์ชันง่าย ๆ นี้รองรับNumberหรือStringเป็นอินพุต
แผ่นเริ่มต้นคือ2 ตัวอักษร
ถ่านเริ่มต้นคือ0
ดังนั้นฉันสามารถเขียนได้
padL(1);
// 01
ถ้าฉันเพิ่มอาร์กิวเมนต์ที่สอง (ความกว้างของแผ่น)
padL(1,3);
// 001
พารามิเตอร์ที่สาม (แผ่นถ่าน)
padL('zzz',10,'x');
// xxxxxxxzzz
แก้ไข
@BanaanaAcid หากคุณผ่านค่าที่ไม่ได้กำหนดหรือสตริงความยาว 0 คุณจะได้รับ .. 0undefined
so:
ตามที่แนะนำ
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)
}
ซึ่งสามารถเขียนในวิธีที่สั้นลงโดยไม่ต้องใช้ชิ้น
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
)
*/
ตอนนี้ถ้าคุณพยายามที่จะวาง 'averylongword' ด้วย 2 ... นั่นไม่ใช่ปัญหาของฉัน
บอกว่าฉันให้คำแนะนำแก่คุณ
ส่วนใหญ่เวลาที่คุณแพดคุณทำมันด้วยค่าเดียวกัน 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"
*/