【javascript】比較関数について

asaba 著者:asaba

【javascript】比較関数について

そういえば、java以外でまともにソートのアルゴリズム作ったことないやということで今回はjavascriptで文字列または数値のソート方法を

自分用に書いていきたいと思います。まず、通常の文字列をソートするときはこんな感じでコードを書きます。(うろ覚えですが)

var str = ['c', 'java', 'php', 'ruby'];
str.sort();

console.log(str);

実行例

短いですが、こんな短文で文字列ならば簡単にソートをすることができます。リストとかをアルファベット順に揃えて出したいという時に

使えるメソッドですね。では数値でも同じように検索できるのでは?と思うのですが、ただ数値を検索対象にしただけでは正常に働いては

くれないです。

var num = [6, 20, 50, 36, 5];
num.sort();

console.log(num);

実行例

これだと、sort関数がnum配列を文字列と認識してしまうため、一番前の数値の若い順にソートされてしまい数値の小さい順に並べたいと

いう意図には適いません。という訳で、正しい順番で数値をソートするには、この比較関数を使う必要があります。実装方法はシンプル

で、どのブラウザでも差異無く動かすことができます。比較方法は次の通りです。

function compareFunc(a, b) {
return a - b;
}

var num = [6, 20, 50, 36, 5];
num.sort(compareFunc);

console.log(num);

実行例

このメソッドでは、compareFunc内でreturnした引数の差の値で決めています。例えば、引数が6と20だった場合は差分が-14なので、負の

値とみなされここではソートされずに次の値を比較していく仕組みになっています。反対に正の値として判定された場合、ここでは6と5を

比較した場合はソートされ順番が入れ替わります。これを配列文繰り返すことにより正しい数値の順番にソートが出来るという訳です。

javaだとアルゴリズム書くのがめんどくさかったのですが、もしかしたら自分が知らないだけでこのsort関数みたいな簡単なメソッドが

用意されているのだろうか?だとしたら勉強不足です・・・



  • この記事いいね! (0)

著者について

asaba

asaba author

helloWorld!!!!