JavaScript에서 선행 0으로 숫자 채우기
JavaScript에서는 패딩이 필요합니다.
예를 들어 숫자 9를 사용하면 "0009"가됩니다. 숫자 10이라고하면 "0010"이됩니다. 항상 네 자리 숫자를 어떻게 포함하는지 주목하십시오.
이 작업을 수행하는 한 가지 방법은 숫자에서 4를 빼서 0을 뺀 것입니다.
이 작업을 수행하는 더 매끄러운 방법이 있습니까?
지금까지 진행중인 많은 "슬릭 (slick)"은 아닙니다.
function pad(n, width, z) {
z = z || '0';
n = n + '';
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}
숫자로 배열을 초기화하면 배열 length
에 해당 값으로 설정된 배열이 만들어 지므로 배열에 많은 undefined
요소 가 포함 된 것처럼 보입니다 . 일부 Array 인스턴스 메서드 .join()
는 값 이없는 배열 요소를 건너 뛰지 만 적어도 완벽하지는 않습니다. 값이 빈 문자열 인 것처럼 처리합니다. 따라서 각 배열 요소 사이에 0 문자 (또는 "z"가 무엇이든)의 사본을 얻습니다. 그래서 거기에있는 이유가 + 1
있습니다.
사용법 예 :
pad(10, 4); // 0010
pad(9, 4); // 0009
pad(123, 4); // 0123
pad(10, 4, '-'); // --10
function padToFour(number) {
if (number<=9999) { number = ("000"+number).slice(-4); }
return number;
}
그런 것?
이해하기 쉽지만 매끄러운 보너스 ES6 버전 보너스 :
let padToFour = number => number <= 9999 ? `000${number}`.slice(-4) : number;
ES6isms :
let
블록 범위 변수입니다 (var
함수 범위 지정 과 반대 )=>
다른 무엇보다도function
매개 변수로 대체되는 화살표 기능입니다.- 화살표 함수가 단일 매개 변수를 사용하면 괄호를 생략 할 수 있습니다 (따라서
number =>
) - 화살표 함수 본문에 한 줄로 시작하는
return
경우 중괄호와return
키워드를 생략 하고 간단히 표현식을 사용할 수 있습니다 - 함수 본문을 한 줄로 줄이려면 속이 고 삼항 식을 사용했습니다.
시험:
String.prototype.lpad = function(padString, length) {
var str = this;
while (str.length < length)
str = padString + str;
return str;
}
이제 테스트 :
var str = "5";
alert(str.lpad("0", 4)); //result "0005"
var str = "10"; // note this is string type
alert(str.lpad("0", 4)); //result "0010"
에서 ECMAScript를 8 , 우리는 새로운 방법이 padStart
및 padEnd
구문 아래에 있습니다.
'string'.padStart (targetLength [, padString]) :
이제 사용할 수 있습니다
const str = "5";
str.padStart(4, '0'); // '0005'
웃긴, 나는 최근에 이것을해야했다.
function padDigits(number, digits) {
return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
}
다음과 같이 사용하십시오.
padDigits(9, 4); // "0009"
padDigits(10, 4); // "0010"
padDigits(15000, 4); // "15000"
아름답지는 않지만 효과적입니다.
당신은 당신이 숫자가 있다고 말했다
String.prototype.padZero= function(len, c){
var s= '', c= c || '0', len= (len || 2)-this.length;
while(s.length<len) s+= c;
return s+this;
}
Number.prototype.padZero= function(len, c){
return String(this).padZero(len,c);
}
다음과 같이 할 수 있습니다.
function pad ( num, size ) {
return ( Math.pow( 10, size ) + ~~num ).toString().substring( 1 );
}
편집 : 이것은 함수에 대한 기본 아이디어 일뿐이지만 더 큰 숫자 (유효하지 않은 입력)에 대한 지원을 추가하는 것이 좋습니다.
function pad ( num, size ) {
if (num.toString().length >= size) return num;
return ( Math.pow( 10, size ) + Math.floor(num) ).toString().substring( 1 );
}
이것은 두 가지 일을합니다.
- 숫자가 지정된 크기보다 크면 단순히 숫자를 반환합니다.
Math.floor(num)
대신 사용하면~~num
더 큰 숫자가 지원됩니다.
재미를 위해 루프를 사용하여 여분의 0을 만드는 대신 :
function zeroPad(n,length){
var s=n+"",needed=length-s.length;
if (needed>0) s=(Math.pow(10,needed)+"").slice(1)+s;
return s;
}
이것은 실제로 '매끄러운'것은 아니지만 각 패딩에 대해 문자열 연결을 수행하는 것보다 정수 연산을 수행하는 것이 더 빠릅니다 0
.
function ZeroPadNumber ( nValue )
{
if ( nValue < 10 )
{
return ( '000' + nValue.toString () );
}
else if ( nValue < 100 )
{
return ( '00' + nValue.toString () );
}
else if ( nValue < 1000 )
{
return ( '0' + nValue.toString () );
}
else
{
return ( nValue );
}
}
이 기능은 또한 특정 요구 (4 자리 패딩)에 맞게 하드 코딩되므로 일반적이지 않습니다.
항상 길이가 4라고 언급 했으므로이 매끄러운 확인을 위해 오류 검사를하지 않습니다. ;)
function pad(input) {
var BASE = "0000";
return input ? BASE.substr(0, 4 - Math.ceil(input / 10)) + input : BASE;
}
아이디어 : 단순히 '0000'을 제공된 숫자로 바꾸십시오 ... 문제 input
는 0이면 '0000'을 반환하도록 하드 코딩해야합니다. LOL.
충분히 매끄러 워야합니다.
JSFiddler : http://jsfiddle.net/Up5Cr/
참고 URL : https://stackoverflow.com/questions/10073699/pad-a-number-with-leading-zeros-in-javascript
'Programming' 카테고리의 다른 글
objective-c / cocoa에서 예외 발생 (0) | 2020.02.20 |
---|---|
반복하는 동안 일반 목록에서 요소를 제거하는 방법은 무엇입니까? (0) | 2020.02.20 |
한 테이블에서 다른 테이블에 존재하지 않는 모든 레코드를 선택하는 방법은 무엇입니까? (0) | 2020.02.20 |
VS 2012 : 솔루션 탐색기를 현재 파일로 스크롤 (0) | 2020.02.20 |
Laravel 5의 맞춤형 헬퍼를위한 모범 사례 (0) | 2020.02.20 |