Ecco un altro modo. Viene da qualcosa che ho fatto che deve essere fatto migliaia di volte su un caricamento della pagina. È abbastanza efficiente dalla CPU per codificare una stringa di zeri una volta sola, e tritare quante volte è necessario per il pad tutte le volte che è necessario. Mi piace molto il potere del metodo 10: è piuttosto flessibile.
In ogni caso, questo è efficiente come ho potuto venire con:
Per la domanda iniziale, scegliere uno dei casi ...
var number = 1310;
var number = 120;
var number = 10;
var number = 7;
poi
// only needs to happen once
var zeroString = "00000";
// one assignment gets the padded number
var paddedNum = zeroString.substring((number + "").length, 4) + bareNum;
//output
alert("The padded number string is: " + paddedNum);
Ovviamente è ancora necessario convalidare l'input. Perché questo funziona solo in modo affidabile alle seguenti condizioni:
- numero di zeri nel zeroString è desired_length + 1
- Numero di cifre nel numero di partenza è minore o uguale alla lunghezza desiderata
Backstory:
Ho un caso che richiede un numero zero di lunghezza fissa (14 cifre). Volevo vedere quanto basico potevo fare questo.Viene eseguito decine di migliaia di volte su una pagina caricata, quindi l'efficienza è importante. Non è completamente riutilizzabile così com'è, ed è un po 'poco elegante. Tranne che è molto molto semplice.
Per la stringa con n cifre desiderata, questo metodo richiede una stringa di (almeno) n + 1 zeri. L'indice 0 è il primo carattere nella stringa, che non sarà mai usato, quindi in realtà potrebbe essere qualsiasi cosa.
Si noti inoltre che string.substring() è diverso da String.substr()!
var bareNum = 42 + '';
var zeroString = "000000000000000";
var paddedNum = zeroString.substring(bareNumber.length, 14) + bareNum
Questo tira zeri da zeroString partire dalla posizione corrispondente alla lunghezza della stringa, e continua ad ottenere zeri alla lunghezza necessaria di 14. Fintanto che "14" nella terza riga è un numero intero inferiore del numero di caratteri in zeroString, funzionerà.
Non si desidera eseguire il cast 1310 sulla stringa "1310", come se si lanciasse tutti gli altri casi alle stringhe? –
Sono d'accordo con Šime Vidas - la mia risposta sotto farà proprio questo. –
Vedere: http://stackoverflow.com/questions/1267283/how-can-i-create-a-zerofilled-value-using-javascript – Thai