使用javascript对数组中的任何数字进行排名

时间:2017-10-04 08:48:02

标签: javascript arrays

我正在寻找一个等于RANK function in Excel的函数。

  

返回数字列表中数字的等级。一个等级   number是相对于列表中其他值的大小。 (如果你去的话   对列表进行排序,数字的等级将是它的位置。)

也就是说,取一个(比如15个)数组,其中一些可能是相同的,检查数组中的任何数字,并确定它所拥有的数组中的哪个等级。数组中的最大数字被分配为1,相同的数字应该保持相同的排名。有人能说清楚这个吗?

3 个答案:

答案 0 :(得分: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; }




答案 1 :(得分:0)

这似乎是一个任务问题,但不过我会尝试回答: 为了能够排序你可能需要排序的数字,你可以使用名为lodash的库,它有一个名为sortby()的函数或使用任何排序算法(例如合并排序,插入排序或冒泡排序),一旦元素被排序,你可以迭代它,从最高开始并继续将值推送到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数组本质上是关联的,所以它一直是键值,即使它是一个普通的整数数组。(请记住)

答案 2 :(得分: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的项目,则下一个项目将排名为4.