それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Javascriptで文字列の0埋め、空白で右寄せでフォーマット

Javascript で sprintf( "%04d" 987 ); をやりたいと思った

var i = 123
( "000" + i ).substr(-4) //=> 0123

なるほど! substr と組み合わせればいいのか

> ( ("000") + 1 )
'0001'
> ( ("000") + 1 ).substr(-1)
'1'
> ( ("000") + 1 ).substr(-3)
'001'
> ( ("000") + 1 ).substr(-4)
'0001'
> ( ("000") + 10 ).substr(-4)
'0010'
[1,2,3,4,5,6,7,8,9,10].
map(function(e){return e*e*e ;}).
map(function(e){
   return ("000" + e).substr(-4) 
}).join(" ")

//=>'0001 0008 0027 0064 0125 0216 0343 0512 0729 1000'

文字列の右寄せについても、空白を入れるだけだから

実行結果。

str = [1,2,3,4,5,6,7,8,9,10].map(function(e){return e*e*e}).map(function(e){ 
   return ("   " + e).substr(-4) 
}).join("\n")
console.log(str)
/*
   1
   8
  27
  64
 125
 216
 343
 512
 729
1000
*/

美しい!

右寄せと、0パディングのためだけに、外部ライブラリを script タグでツッコムの嫌だったんですよね。これで楽になりそうです。

コレを使いやすく( 2016/06/04 追記)

Number.prototype.format = function(char, cnt){
  return (Array(cnt).fill(char).join("") + this.valueOf()).substr(-1*cnt); 
}

(100).format("_",5) //=> "__100"
(-1).format(" ",5)    //=> "   -1"
23..format(" ",5)    //=>"   23"

これで、数字の右寄せや、0埋め、printf っぽいことが出来るよね。

ちなみに通貨などは

Intl.NumberFormat

Intl.NumberFormat - JavaScript | MDN

コレを使って金額はぱぱっと処理できる

var number = 123456.789;
console.log(new Intl.NumberFormat('ja-JP', { style: 'currency', currency: 'JPY' }).format(number));
// → ¥123,457

何でもかんでも npm に頼るのは良くないよ。

参考資料

書式化文字列 (format / sprintf) | hydroculのメモ

関連資料

Array(10) がundefined になる問題。 - それマグで!

Javascript で、 1.1.1.toString() #=> 1 なのですが 1.toString… - 人力検索はてな