JS:Array内の数値の順位を求める

JS:Array内の数値の順位を求める

author : koki

publish date :

配列に格納されている数値の順位の求め方をご紹介します。
順位を求めるのは使う頻度は低いと思いますが、たまーに使う時があります。
その”たまーに”のときのための知識です。

配列内の数値の順位を求める方法

数値の大きい順の順位を調べる方法(降順)

こんな配列があるとします。

var arr = [4, 2, 3, 1];

それぞれの数値の順位を求めたいとしたら、次のようなコードを書いてみてください。

var arr = [4, 2, 3, 1];
var sorted = arr.slice().sort(function(a, b){return b - a});
var ranks = arr.slice().map(function(x){return sorted.indexOf(x) + 1});

そうすると、arrの数値それぞれの順位がranks格納されます。

処理の流れ

処理の流れとしては、次のようになります。
2行目のコードで、元の配列であるarrの値を降順にソートしsortedに格納します。

var sorted = arr.slice().sort(function(a, b){return b - a});

3行目のコードで、元の配列とソートした配列を比較し、順位を調べつつranksに順位を格納するというものです。

var ranks = arr.slice().map(function(x){return sorted.indexOf(x) + 1});

数値の小さい順の順位を調べる方法(昇順)

昇順(数が小さい順)の順位を知りたい場合は、次のようなコードを書いてみてください。

var arr = [4, 2, 3, 1];
var sorted = arr.slice().sort(function(a, b){return a - b});
var ranks = arr.slice().map(function(x){return sorted.indexOf(x) + 1});

ぱっと見、どこが変わったのか分かりにくいですが、2行目の.sort()メソッドで使っている比較関数が変わっただけです。

処理の流れとしても比較関数の部分が変わっただけです。

実際のところ、配列に格納されている数値の順位の求め方は何通りもありますが、シンプルかつしっかり動くコードという事で今回ご紹介しました。

旧IEに対応する必要がある場合

旧IEも対応が必要な場合は以下も合わせてお読みください。

関連する記事

.sort()メソッドで比較関数を使っていますが、比較関数についての記事もアップしてあるので興味がある方は読んでみてください。

ではでは、よき開発ライフを?。