pad con valores predeterminados
Me di cuenta de que principalmente necesito el padLeft para la conversión de tiempo / relleno de números
así que escribí esta función
function padL(a,b,c){//string/number,length=2,char=0
return (new Array(b||2).join(c||0)+a).slice(-b)
}
Esta función simple admite Número o Cadena como entrada
el pad predeterminado es de 2 caracteres
char predeterminado es 0
así que simplemente puedo escribir
padL(1);
// 01
si agrego el segundo argumento (ancho del pad)
padL(1,3);
// 001
tercer parámetro (pad char)
padL('zzz',10,'x');
// xxxxxxxzzz
EDITAR
@BananaAcid Si pasa un valor indefinido o una cadena de longitud 0 se obtiene 0undefined
.so:
como se sugiere
function padL(a,b,c){//string/number,length=2,char=0
return (new Array((b||1)+1).join(c||0)+(a||'')).slice(-(b||2))
}
pero esto también se puede lograr de una manera más corta.
function padL(a,b,c){//string/number,length=2,char=0
return (new Array(b||2).join(c||0)+(a||c||0)).slice(-b)
}
trabaja también con:
padL(0)
padL(NaN)
padL('')
padL(undefined)
padL(false)
Y si desea poder rellenar de ambas maneras:
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)
}
que se puede escribir de forma más corta sin usar el corte.
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
)
*/
ahora si intentas rellenar 'averylongword' con 2 ... ese no es mi problema.
Dije que te doy una propina.
La mayoría de las veces si rellena lo hace por el mismo valor N veces.
¡El uso de cualquier tipo de función dentro de un ciclo ralentiza el ciclo!
Entonces, si solo desea dejar algunos números dentro de una larga lista, no use funciones para hacer esta cosa simple.
usa algo como esto:
var arrayOfNumbers=[1,2,3,4,5,6,7],
paddedArray=[],
len=arrayOfNumbers.length;
while(len--){
paddedArray[len]=('0000'+arrayOfNumbers[len]).slice(-4);
}
si no sabe cómo el tamaño máximo de relleno se basa en los números dentro de la matriz.
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"
*/