JavaScript で数字の桁数を揃える

難しそうな記事を書こうとしても結局真偽や安全性の検証ができず公開できないことに気がついたので、初心者らしく初心者らしいものを書いてみます。脱・下書き。

さて本題ですが、JavaScript で '001' や '0100' のように桁数を揃えたい時は、ユーザー定義関数を作る必要があります。
調べると方法は沢山ありますが、ここでは私がベストだと思った方法を関数にして書き残しておきます。

Array - JavaScript | MDN
Array.join - JavaScript | MDN
String.prototype.slice() - JavaScript | MDN

number パラメータには対象となる数値を、digits パラメータには補正したい桁数を渡します。
digits で指定した桁数より補正対象の number の桁数がオーバーしてしまう場合、桁数を合わせるために数値は左端から切り取られます。

まず new Array(digits + 1) で、digits の数字より一つ要素の多い配列を生成しています。
その後、配列の要素を .join('0') により '0' で繋ぎます。先程生成した配列の要素の値自体は空なので、結果的に 0 だけが繋がれていく訳です。
例えば new Array(3 + 1).join('0') の場合、イメージはこんな感じです。
■……配列の要素

■■■■

■0■0■0■

000

何故こういった奇抜な動きをしているかというと、JavaScript は Python のような 'A' * 3'AAA' となる「乗算による文字列の繰り返し」を命令できないためです。
地味に不便ですが、言語仕様なので仕方ないですね。

次に、繋げた桁数分の '0'number を文字列結合します。
その際、数値型である number は JavaScript によって強制的に文字列型へと変換されます。

最後に、.slice(負の値) で右から桁数分の文字を選び取り、それより左の桁数オーバーした数値は切り捨て、return 値としてその文字列を返します。

 

zeros の部分、for 文で digits の数だけ繰り返して 0 を繋ぎ合わせる方法もありますが、桁数が膨大な場合それだけ for 文を繰り返すことになって結構違いがあったので、どんな桁数であれ処理が一度で済む new Array() のやり方を選びました。前者のほうが正攻法で好きではあるんですけど。

 

以上、パッと見は裏ワザみたいですが分かるとなーんだになるコードでした。

ではではー