Presented by Nishishi via Movable Type. Last Updated: 2016/10/14. 13:32:45.

数値の大きい順・小さい順に文字列を並び替える(ソートする)方法

2つの変数に格納された数値のどちらが大きいか(または小さいか)を調べるには、単にif文などで大なり記号「<」か小なり記号「>」を使って判別すれば良いだけです。
が、たくさんの変数に格納された数値を、大きい順に並べたり小さい順に並べたりするには、自力でループを作るよりももっと楽な書き方があります。

JavaScriptのsortメソッドは、標準では「文字コード順」に並べ替える(ソートする)だけですが、引数を与えてやれば、数値の大きい順・小さい順に並べ替えることもできます。
このsortメソッドを使えば、たくさんの数値の並べ替えも楽々です。

入力文字列を、数値の大きい順・小さい順に並び替える(ソートする)サンプル

以下のテキストエリアに適当な文字列を複数行ほど入力してから、下部の「数値の大きい順にソートする」ボタンを押すと、入力内容を数値として解釈して、値の大きい順に並び変わります。「数値の小さい順にソートする」ボタンを押せば、同様に値の小さい順に並び変わります。

◆文字列リスト(半角数値のみ入力):

上記のサンプルでは、数値に変換できる文字列だけが入力されることを前提にしています。全角数字や漢字など、そのままでは数値として解釈されない文字列が入力されている場合のエラー処理は特に施していないため、それらの文字列があると正しくソートされません。(^_^;)

数値の大きい順で並び替える(ソートする)ためのJavaScriptソース

先ほどのソート処理は、以下のJavaScriptソースで作っています。ここでのソート処理は、JavaScriptに最初から存在するsortメソッドを活用しています。このsortメソッドには、引数に「比較用の関数」を指定できます。ここでは、「数値の大小を判別する無名関数」を引数として指定することで、数値でのソートを実現しています。

function SortByNumLarger() {
   // textareaの内容を改行で分割して配列に格納
   var targetArray = document.getElementById('sampleTargetLines').value.split("\n");
   // 数値の大きい順にソート
   var sortedArray = targetArray.sort( function(a,b) {
      return Number(b) - Number(a);
   }
);
   // ソート結果を書き戻す
   document.getElementById('sampleTargetLines').value = StringToSafety( sortedArray.join("\n") );
}

文字列の入力・出力用として、以下のHTMLを用意しています。textarea要素には、JavaScript側から中身(文字列)を扱うために、id属性でid名「sampleTargetLines」を割り振っています。

◆文字列リスト:<textarea cols="30" rows="6" id="sampleTargetLines">100
-20
345
: : :
0</textarea>
<input type="button" value="数値の大きい順にソートする" onclick="SortByNumLarger();" />

上記のソースによって、「数値の大きい順にソートする」ボタンをクリックすると、テキストエリアに入力した複数行の文字列が(数値として解釈した場合の)値の大きい順に並び変わる機能ができがあります。

数値の小さい順で並び替える(ソートする)ためのJavaScriptソース

逆に、数値の小さい順で並び替えたい場合も、記述するソースはほとんど同じです。ただ、sortメソッドに渡す「比較用の関数」の比較処理部分を逆転させるだけです。

function SortByNumLarger() {
   // textareaの内容を改行で分割して配列に格納
   var targetArray = document.getElementById('sampleTargetLines').value.split("\n");
   // 数値の小さい順にソート
   var sortedArray = targetArray.sort( function(a,b) {
      return Number(a) - Number(b);
   }
);
   // ソート結果を書き戻す
   document.getElementById('sampleTargetLines').value = StringToSafety( sortedArray.join("\n") );
}

上記のように、sortメソッドに渡す「比較用の関数」を作ることで、好きなように並び替え(ソート)ができます。

なお、数値の大小ではなく、あらゆる文字列を対象にして「文字コード順」に並び替えたい場合の方法は、記事「文字コード順に文字列を並び替える(ソートする)方法」で解説していますのでご参照下さい。

JavaScript TIPS 主要なカテゴリ

現在、以下のカテゴリに区分してTIPSを公開しています。

  • イベント : JavaScriptを実行するトリガーとなるイベントに関するTIPS
  • 入力フォーム : JavaScriptで入力フォームを扱う方法に関するTIPS
  • 情報取得 : JavaScriptで様々な情報を得る方法に関するTIPS
  • 操作・移動 : JavaScriptでブラウザを操作したり表示ページを移動したりする方法に関するTIPS
  • 日付・時刻 : JavaScriptで日付や時刻を扱う方法に関するTIPS
  • 機能 : JavaScriptで何らかの機能を実現する方法に関するTIPS
  • 装飾・内容変更 : JavaScriptで装飾や内容を変更する方法に関するTIPS
  • 計算・変換 : JavaScriptで様々な計算や変換処理を行う方法に関するTIPS

▲各カテゴリ毎に、TIPSのタイトルと概要を一覧できます。ぜひ、いろいろ覗いてみて下さい!

関連書籍・関連ソフトなど