pad con valori predefiniti
Ho notato che per lo più ho bisogno del padLeft per la conversione del tempo / il riempimento del numero
così ho scritto questa funzione
function padL(a,b,c){//string/number,length=2,char=0
return (new Array(b||2).join(c||0)+a).slice(-b)
}
Questa semplice funzione supporta il numero o la stringa come input
il pad predefinito è 2 caratteri
il carattere predefinito è 0
così posso semplicemente scrivere
padL(1);
// 01
se aggiungo il secondo argomento (larghezza del pad)
padL(1,3);
// 001
terzo parametro (pad char)
padL('zzz',10,'x');
// xxxxxxxzzz
EDIT
@BananaAcid se passi un valore indefinito o una stringa di lunghezza 0 ottieni 0undefined
..so:
come suggerito
function padL(a,b,c){//string/number,length=2,char=0
return (new Array((b||1)+1).join(c||0)+(a||'')).slice(-(b||2))
}
ma ciò può anche essere ottenuto in modo più breve.
function padL(a,b,c){//string/number,length=2,char=0
return (new Array(b||2).join(c||0)+(a||c||0)).slice(-b)
}
funziona anche con:
padL(0)
padL(NaN)
padL('')
padL(undefined)
padL(false)
E se vuoi essere in grado di eseguire il pad in entrambi i modi:
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)
}
che può essere scritto in modo più breve senza usare 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
)
*/
ora se provi a riempire 'averylongword' con 2 ... non è un mio problema.
Ho detto che ti do un consiglio.
La maggior parte delle volte, se lo rilasci, lo fai per lo stesso valore N volte.
L'uso di qualsiasi tipo di funzione all'interno di un loop rallenta il loop !!!
Quindi, se vuoi solo lasciare alcuni numeri all'interno di una lunga lista, non usare le funzioni per fare questa semplice cosa.
usa qualcosa del genere:
var arrayOfNumbers=[1,2,3,4,5,6,7],
paddedArray=[],
len=arrayOfNumbers.length;
while(len--){
paddedArray[len]=('0000'+arrayOfNumbers[len]).slice(-4);
}
se non sai come la dimensione massima di riempimento in base ai numeri all'interno dell'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"
*/