2017-10-04 32 views
0

我在等待RANK function in Excel的功能。使用javascript排列数组中的任意数字

返回数字列表中数字的等级。 号码的排名是其相对于列表中其他值的大小。 (如果你要 列表排序,数量的排名将是它的位置。)

也就是说,采取的(比方说15)的数字,其中一些可能是相同的,检查任何数量的数组在数组中,并确定数组中的哪个等级。数组中最高的数字被分配一个等级1,相同的数字应该保持相同的排名。任何人都可以阐明这一点吗?

+1

我们有些人可能不知道Excel的功能。请分享相同的输入和他们各自的输出。 – gurvinder372

+0

Rank函数似乎在Excel中不推荐使用*重要说明:该函数已被替换为一个或多个新函数,这些函数可以提供更高的准确性,并且其名称可以更好地反映其用法。尽管此功能仍可用于向后兼容,但您应该考虑从现在开始使用新功能,因为此功能在未来版本的Excel中可能不可用。*复制已损坏的功能似乎有点奇怪。 – Liam

+1

@Liam:弃用通知看起来像是用于多个弃用函数的通用措辞。 Excel的'RANK'没有什么问题。它正在被替换为'RANK.AVG'和'RANK.EQ',它们的区别仅在于如何排列相同的条目,并且该行为已由OP明确指定。 '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'应该有排名5,而不是4,因为有两个条目排名3。 –

+0

@DavidHedlund,所以排名不连续?像例子2? –

+0

是的,确切地说。示例2更好地模拟了Excel的“RANK” –

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数组在本质缔所以它像键值所有的时间,即使其一个普通整数数组。(记住)

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。