JavaScript では、パディングが必要です。
たとえば、私が 9 という数字を持っている場合、それは「0009」になります。数が10なら「0010」です。常に 4 桁になることに注意してください。
これを行う 1 つの方法は、数値から 4 を引いて、配置する必要がある 0 の数を取得することです。
これを行うためのより滑らかな方法はありますか?
JavaScript では、パディングが必要です。
たとえば、私が 9 という数字を持っている場合、それは「0009」になります。数が10なら「0010」です。常に 4 桁になることに注意してください。
これを行う 1 つの方法は、数値から 4 を引いて、配置する必要がある 0 の数を取得することです。
これを行うためのより滑らかな方法はありますか?
組み込みのString.prototype.padStart()を使用できます
n = 9;
String(n).padStart(4, '0'); // '0009'
n = 10;
String(n).padStart(4, '0'); // '0010'
これまでのところ、多くの「巧妙な」作業は行われていません:
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()
しないか、少なくとも完全にはスキップしません。それらの値が空の文字列であるかのように扱います。したがって、各配列要素の間にゼロ文字 (または「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;
ES6主義:
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 2017には、 以下の構文を持つ新しいメソッド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"
美しくはありませんが、効果的です。
あなたはこのようなことをすることができます:
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 );
}
これは2つのことを行います:
Math.floor(num)
の代わりに使用すると、~~num
より多くの数がサポートされます。これは実際には「巧妙」ではありませんが、パディングごとに文字列連結を行うよりも整数演算を行う方が高速です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 桁のパディング) に合わせてハードコードされているため、一般的ではありません。
楽しみのために、ループを使用して余分なゼロを作成する代わりに:
function zeroPad(n,length){
var s=n+"",needed=length-s.length;
if (needed>0) s=(Math.pow(10,needed)+"").slice(1)+s;
return s;
}