[JavaScript] sort()メソッドによる配列の並び替え

公開

スポンサーリンク

JavaScriptの配列のソートを行うにはsortメソッドを使います。

var hash = ['c','a','e','d','b'];
hash.sort();
for( var i in hash )
  alert(hash[i]);

引数を指定しなかった場合、要素を文字列として比較し、辞書順に並び替えます。上記の配列が要素に持っているのは文字列なので、正しくa,b,c,d,eの順にソートされます。

しかし、要素に数値を持つ配列を、昇順・降順に並び替えたい場合は引数に比較関数を与えなければなりません。例えば、以下の例では正しく並び替えは行われません。

var hash = [12, 1, 65, 105, 65];
hash.sort();
for( var i in hash )
  alert(hash[i]);

sortメソッドに引数がありませんので、数値が文字列として比較されてしまうのです。

上記の配列 [12, 1, 65, 105, 65] を昇順にソートするにはこのようになります。

var hash = [12, 1, 65, 105, 65];
hash.sort(function(a,b){
  return a-b;
});

sort()メソッドに渡す関数は引数を2つ取ります。ソート順はこの関数の返り値により決定されます。返り値が負の場合、aがbより手前に、返り値が正の場合はbがaより手前に並び替えられます。数値比較の場合、負が昇順、正が降順となります。返り値が0の場合は並び替えは行われません。

上記の配列を降順にソートする場合は以下のコードとなります。

var hash = [12, 1, 65, 105, 65];
hash.sort(function(a,b){
  return b-a;
});

スポンサーリンク


Comment