값을 가져 와서 주어진 길이로 채울 수있는 JavaScript 함수가 필요합니다 (공백이 필요하지만 모든 것이 가능합니다). 나는 이것을 찾았다:
암호:
String.prototype.pad = function(l, s, t){
return s || (s = " "), (l -= this.length) > 0 ? (s = new Array(Math.ceil(l / s.length)
+ 1).join(s)).substr(0, t = !t ? l : t == 1 ? 0 : Math.ceil(l / 2))
+ this + s.substr(0, l - t) : this;
};
예:
<script type="text/javascript">
//<![CDATA[
var s = "Jonas";
document.write(
'<h2>S = '.bold(), s, "</h2>",
'S.pad(20, "[]", 0) = '.bold(), s.pad(20, "[]", 0), "<br />",
'S.pad(20, "[====]", 1) = '.bold(), s.pad(20, "[====]", 1), "<br />",
'S.pad(20, "~", 2) = '.bold(), s.pad(20, "~", 2)
);
//]]>
</script>
그러나 나는 그것이 무엇을하고 있는지 알지 못하며 나에게는 효과가없는 것 같습니다.
답변
나는이 해결책을 여기 에서 찾았고 이것은 훨씬 간단합니다.
var n = 123
String("00000" + n).slice(-5); // returns 00123
("00000" + n).slice(-5); // returns 00123
(" " + n).slice(-5); // returns " 123" (with two spaces)
그리고 여기에 문자열 객체를 확장했습니다.
String.prototype.paddingLeft = function (paddingValue) {
return String(paddingValue + this).slice(-paddingValue.length);
};
그것을 사용하는 예 :
function getFormattedTime(date) {
var hours = date.getHours();
var minutes = date.getMinutes();
hours = hours.toString().paddingLeft("00");
minutes = minutes.toString().paddingLeft("00");
return "{0}:{1}".format(hours, minutes);
};
String.prototype.format = function () {
var args = arguments;
return this.replace(/{(\d+)}/g, function (match, number) {
return typeof args[number] != 'undefined' ? args[number] : match;
});
};
“15:30″형식으로 시간을 반환합니다
답변
더 빠른 방법
예를 들어 배열의 값을 채우는 등의 작업을 반복적으로 수행하고 성능이 중요한 요소 인 경우 다음 접근 방식 은 현재 웹에서 논의중인 다른 솔루션에 비해 속도 ( jsPerf )가 거의 100 배나 유리 합니다. 기본 아이디어는 버퍼로 사용하기 위해 패드 기능에 완전히 채워진 빈 문자열을 제공한다는 것입니다. pad 함수는이 미리 채워진 문자열 (하나의 문자열 연결)에 추가 될 문자열에 추가 한 다음 원하는 길이로 결과를 슬라이스하거나 잘라냅니다.
function pad(pad, str, padLeft) {
if (typeof str === 'undefined')
return pad;
if (padLeft) {
return (pad + str).slice(-pad.length);
} else {
return (str + pad).substring(0, pad.length);
}
}
예를 들어, 숫자를 10 자리 길이로 0으로 채우려면
pad('0000000000',123,true);
문자열을 공백으로 채우려면 전체 문자열이 255 자입니다.
var padding = Array(256).join(' '), // make a string of 255 spaces
pad(padding,123,true);
성능 테스트
그리고 이것은 string.repeat
수정 된 JsPerf에 표시된 것처럼 ES6보다 2 배 빠릅니다 .
답변
http://www.webtoolkit.info/javascript_pad.html
/**
*
* Javascript string pad
* http://www.webtoolkit.info/
*
**/
var STR_PAD_LEFT = 1;
var STR_PAD_RIGHT = 2;
var STR_PAD_BOTH = 3;
function pad(str, len, pad, dir) {
if (typeof(len) == "undefined") { var len = 0; }
if (typeof(pad) == "undefined") { var pad = ' '; }
if (typeof(dir) == "undefined") { var dir = STR_PAD_RIGHT; }
if (len + 1 >= str.length) {
switch (dir){
case STR_PAD_LEFT:
str = Array(len + 1 - str.length).join(pad) + str;
break;
case STR_PAD_BOTH:
var padlen = len - str.length;
var right = Math.ceil( padlen / 2 );
var left = padlen - right;
str = Array(left+1).join(pad) + str + Array(right+1).join(pad);
break;
default:
str = str + Array(len + 1 - str.length).join(pad);
break;
} // switch
}
return str;
}
훨씬 더 읽기 쉽습니다.
답변
여기에 재귀 접근 방식이 있습니다.
function pad(width, string, padding) {
return (width <= string.length) ? string : pad(width, padding + string, padding)
}
예를 들면 …
pad(5, 'hi', '0')
=> "000hi"
답변
String.prototype.padStart()
그리고 String.prototype.padEnd()
현재 TC39 후보의 제안은 다음과 같습니다 참조 github.com/tc39/proposal-string-pad-start-end을 (4 월 2016 파이어 폭스에서만 사용할 수 있습니다; polyfill이 가능).
답변
ECMAScript 2017은 padStart 메소드를 문자열 프로토 타입에 추가합니다. 이 방법은 주어진 길이에 공백이있는 문자열을 채 웁니다. 이 방법은 또한 여백에 공백 대신 사용되는 선택적 문자열을 사용합니다.
'abc'.padStart(10); // " abc"
'abc'.padStart(10, "foo"); // "foofoofabc"
'abc'.padStart(6,"123465"); // "123abc"
'abc'.padStart(8, "0"); // "00000abc"
'abc'.padStart(1); // "abc"
같은 방식으로 작동하는 padEnd 메소드도 추가되었습니다.
브라우저 호환성 (및 유용한 polyfill) 은이 링크를 참조하십시오 .
답변
ECMAScript 6 메소드 String # repeat를 사용하면 다음 과 같은 간단한 패드 함수가 가능합니다.
String.prototype.padLeft = function(char, length) {
return char.repeat(Math.max(0, length - this.length)) + this;
}
String#repeat
현재 Firefox 및 Chrome에서만 지원됩니다. 다른 구현의 경우 다음과 같은 간단한 폴리 필을 고려할 수 있습니다.
String.prototype.repeat = String.prototype.repeat || function(n){
return n<=1 ? this : (this + this.repeat(n-1));
}