Oto inny sposób. Pochodzi z tego, co zrobiłem, co trzeba zrobić tysiące razy przy ładowaniu strony. To dość wydajne dla procesora, aby jeden raz zakodować ciąg zer i posiekać tyle ile potrzeba na pad, tyle razy, ile potrzeba. Naprawdę lubię moc 10 metod - to dość elastyczne.
W każdym razie, to jest tak wydajny jak mogłem wymyślić:
dla oryginalnego pytanie wybrać jeden z przypadków ...
var number = 1310;
var number = 120;
var number = 10;
var number = 7;
następnie
// 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);
Oczywiście nadal musisz zweryfikować dane wejściowe. Bo to tylko działa niezawodnie pod następującymi warunkami:
- ilość zer w zeroString jest desired_length + 1
- Ilość cyfr numeru startowego jest mniejsza lub równa żądanej długości
Historia:
mam sprawę, że potrzebuje stałej długości (14-cyfrowy) numer zero-wyściełane. Chciałem zobaczyć, jak bardzo mogę to zrobić.Jest uruchamiany dziesiątki tysięcy razy przy ładowaniu strony, więc wydajność ma znaczenie. Nie nadaje się do ponownego użycia tak jak jest i jest trochę nieelegancka. Tyle, że jest bardzo prosty.
Dla pożądanej liczby cyfr wyściełanych ciągiem, ta metoda wymaga ciągu (co najmniej) n + 1 zera. Indeks 0 jest pierwszym znakiem w łańcuchu, który nigdy nie zostanie użyty, więc tak naprawdę może to być cokolwiek.
Należy również zauważyć, że string.substring() różni się od String.substr()!
var bareNum = 42 + '';
var zeroString = "000000000000000";
var paddedNum = zeroString.substring(bareNumber.length, 14) + bareNum
Pociąga to zer z zeroString zaczynające się w pozycji odpowiadającej długości łańcucha, i kontynuuje się zera do wymaganej długości 14. Tak długo, jak to „14” w trzeciej linii jest mniejsza całkowita niż liczba znaków w zeroString, to zadziała.
Nie chcesz rzutować 1310 na ciąg "1310", tak jak rzucasz wszystkie pozostałe przypadki na ciągi? –
Zgadzam się z Šime Vidasem - moja odpowiedź poniżej zrobi właśnie to. –
Zobacz: http://stackoverflow.com/questions/1267283/how-can-i-create-a-zerofilled-value-using-javascript – Thai