pad avec des valeurs par défaut
J'ai remarqué que j'avais surtout besoin de padLeft pour la conversion de temps / le remplissage des nombres
donc j'ai écrit cette fonction
function padL(a,b,c){//string/number,length=2,char=0
return (new Array(b||2).join(c||0)+a).slice(-b)
}
Cette fonction simple prend en charge Number ou String en entrée
le pavé par défaut est de 2 caractères
le caractère par défaut est 0
donc je peux simplement écrire
padL(1);
// 01
si j'ajoute le deuxième argument (largeur du tampon)
padL(1,3);
// 001
troisième paramètre (pad char)
padL('zzz',10,'x');
// xxxxxxxzzz
EDIT
@BananaAcid si vous passez une valeur non définie ou une chaîne de longueur 0, vous obtenez 0undefined
..so:
comme suggéré
function padL(a,b,c){//string/number,length=2,char=0
return (new Array((b||1)+1).join(c||0)+(a||'')).slice(-(b||2))
}
mais cela peut également être réalisé de manière plus courte.
function padL(a,b,c){//string/number,length=2,char=0
return (new Array(b||2).join(c||0)+(a||c||0)).slice(-b)
}
travaille également avec:
padL(0)
padL(NaN)
padL('')
padL(undefined)
padL(false)
Et si vous voulez être en mesure de remplir les deux façons:
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)
}
qui peut être écrit de manière plus courte sans utiliser de tranche.
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
)
*/
maintenant si vous essayez de garnir 'averylongword' avec 2 ... ce n'est pas mon problème.
Dit que je vous donne un pourboire.
La plupart du temps, si vous remplissez, vous le faites pour la même valeur N fois.
L'utilisation de tout type de fonction dans une boucle ralentit la boucle !!!
Donc, si vous voulez simplement laisser quelques chiffres dans une longue liste, n'utilisez pas de fonctions pour faire cette chose simple.
utilisez quelque chose comme ceci:
var arrayOfNumbers=[1,2,3,4,5,6,7],
paddedArray=[],
len=arrayOfNumbers.length;
while(len--){
paddedArray[len]=('0000'+arrayOfNumbers[len]).slice(-4);
}
si vous ne savez pas comment la taille de remplissage maximale est basée sur les nombres à l'intérieur du tableau.
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"
*/