我在等待RANK function in Excel的功能。使用javascript排列数组中的任意数字
返回数字列表中数字的等级。 号码的排名是其相对于列表中其他值的大小。 (如果你要 列表排序,数量的排名将是它的位置。)
也就是说,采取的(比方说15)的数字,其中一些可能是相同的,检查任何数量的数组在数组中,并确定数组中的哪个等级。数组中最高的数字被分配一个等级1,相同的数字应该保持相同的排名。任何人都可以阐明这一点吗?
我在等待RANK function in Excel的功能。使用javascript排列数组中的任意数字
返回数字列表中数字的等级。 号码的排名是其相对于列表中其他值的大小。 (如果你要 列表排序,数量的排名将是它的位置。)
也就是说,采取的(比方说15)的数字,其中一些可能是相同的,检查任何数量的数组在数组中,并确定数组中的哪个等级。数组中最高的数字被分配一个等级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; }
如果你想匹配'RANK'的行为,你的例子中的条目'3'应该有排名5,而不是4,因为有两个条目排名3。 –
@DavidHedlund,所以排名不连续?像例子2? –
是的,确切地说。示例2更好地模拟了Excel的“RANK” –
这似乎是一个分配的问题,但无论如何,我会尽量回答: 能够排名你可能需要的数字首先将它们排序,可以使用名为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数组在本质缔所以它像键值所有的时间,即使其一个普通整数数组。(记住)
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。
我们有些人可能不知道Excel的功能。请分享相同的输入和他们各自的输出。 – gurvinder372
Rank函数似乎在Excel中不推荐使用*重要说明:该函数已被替换为一个或多个新函数,这些函数可以提供更高的准确性,并且其名称可以更好地反映其用法。尽管此功能仍可用于向后兼容,但您应该考虑从现在开始使用新功能,因为此功能在未来版本的Excel中可能不可用。*复制已损坏的功能似乎有点奇怪。 – Liam
@Liam:弃用通知看起来像是用于多个弃用函数的通用措辞。 Excel的'RANK'没有什么问题。它正在被替换为'RANK.AVG'和'RANK.EQ',它们的区别仅在于如何排列相同的条目,并且该行为已由OP明确指定。 'RANK.EQ'完全匹配不推荐使用的函数'RANK'。 –