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… - 人力検索はてな