2017-10-04 8 views
0

私はRANK function in Excelと等しい機能を探しています。javascriptを使用して配列内の任意の数値をランク付けします

数字のリスト内の数字のランクを返します。番号 のランクは、リスト内の他の値との相対的なサイズです。 (あなたが ソートリストにした場合は、数の順位がその位置になります。)

ある

、(たとえば15)と同一であるかもしれないそのうちのいくつかの数字は、任意の数を調べるの配列を取りますアレイ内のどのランクを保持するかを設定します。配列の中で最も高い数字は1のランクに割り当てられ、同じ数字は同じランクを保持するはずです。誰もこれに光を当てることができますか?

+1

私たちの何人かは、Excelの機能を知らないかもしれません。同じ入力とそのそれぞれの出力を共有してください。 – gurvinder372

+0

ランク関数はExcelでは推奨されていないようです*重要:この機能は、精度が向上し、その名前がその使用法をよりよく反映する1つ以上の新しい機能に置き換えられています。この機能は下位互換性のために引き続き利用できますが、今後このバージョンのExcelでは使用できない可能性があるため、新しい機能の使用を検討する必要があります*破損した機能を複製するのはちょっと奇妙です。 – Liam

+1

@Liam:廃止予定通知は廃止予定のいくつかの機能に使用される一般的な表現のようです。 Excelの 'RANK'には何も壊れていません。これは、どのように同一のエントリがランク付けされ、その動作がOPによって明示的に指定されたかだけが異なる 'RANK.AVG'および' RANK.EQ'に置き換えられています。 'RANK.EQ'は廃止された関数' RANK'とまったく同じです。 –

答えて

1

値と前の値が等しくない場合にのみ増分される変数を取ることができます。これはソートされた配列に対してのみ機能します。

var data = [10, 8, 7, 7, 3, 3, 2, 1], 
 
    rank = data.map(function (rank) { 
 
     return function (a, i, aa) { 
 
      return [a, aa[i - 1] === a ? rank : ++rank]; 
 
     }; 
 
    }(0)); 
 
    
 
console.log(rank.map(JSON.stringify));
.as-console-wrapper { max-height: 100% !important; top: 0; }

RANK

var data = [10, 8, 7, 7, 3, 3, 2, 1], 
 
    rank = data.map(function (rank) { 
 
     return function (a, i, aa) { 
 
      return [a, aa[i - 1] === a ? rank : rank = i + 1]; 
 
     }; 
 
    }(0)); 
 
    
 
console.log(rank.map(JSON.stringify));
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

'RANK'の振る舞いにマッチさせたい場合、例題の' 3'は4ではなくランク5になります。 –

+0

@DavidHedlundなのでランクは連続していませんか?例2のように? –

+0

はい、正確です。例2 Excelの 'RANK'をよく模倣する –

0

のより良い模倣これは、割り当ての問題のように思えるが、それにもかかわらず、私は答えることを試みる: をランク付けすることができるようにあなたが必要とするかもしれない数字最初のものを整理するには、sortby()という関数を持つlodashというライブラリを使用するか、ソートアルゴリズム(例:マージソート、挿入ソート、またはバブルソート)、要素がソートされると、反復処理ができます。最高から始まり、値をjavascriptオブジェクトにプッシュし続けることができます。

(sortedArray)=>{ 
    var mySortedArrWithRank; 
    for(int i=0;i<sortedArray.length;i++){ 
     if(sortedArray[i]!=sortedArray[i-1]){ 
      rank--; 
     } 
     mySortedArrWithRank[rank].push(sortedArray[i]); 
     } 
    } 

またJavaScriptの配列は、すべての時間であっても、その普通の整数アレイしかし、そのようなキー値ので、本質的に会合している。

0
function rank(num, arr) { 
    return arr 
     .sort(function(a,b) { return b-a; }) 
     .indexOf(num) + 1; 
} 

上記関数の挙動を再現する必要があり(注意してください) Excelの=RANK。もし値と配列を渡し、その出力は、アレイ内のその値のランクである:

rank(2, [1,2,7,12,3,2,4,12,30,5,6]); // > 9 

ランク2を持つ2つの項目は、上記の例のように、ある場合は、次の項目がなりますランク4

関連する問題