配列中の順位を調べる方法を考えました。
ExcelにRANK関数がありますので、これを再現してみます。
サンプルは下の通りです。
updownに従ってarrs内の数値を並べ替えたとき、valueが何番目に位置するかを返します。
updownは、省略または0は降順(最多が1位)、0以外は昇順(最少が1位)となります。
function rank(value, arrs, updown){
var i, thisrank, array_length, sign;
if(typeof(updown) == "undefined"){
updown = 0;
}
sign = updown == 0 ? 1 : -1;
thisrank = 1;
array_length = arrs.length;
for(i = 0; i < array_length; i ++){
if(sign * (arrs[i] - value) > 0){
thisrank ++;
}
}
return thisrank;
}
var i, thisrank, array_length, sign;
if(typeof(updown) == "undefined"){
updown = 0;
}
sign = updown == 0 ? 1 : -1;
thisrank = 1;
array_length = arrs.length;
for(i = 0; i < array_length; i ++){
if(sign * (arrs[i] - value) > 0){
thisrank ++;
}
}
return thisrank;
}
例えば次のようにします。
「20」は配列の中で昇順に数えると2番目なので「2」が表示されます。
alert(RANK(20, [20, 40, 40, 10, 50], 1); // "2"
コメント