我正在寻找一个等于RANK function in Excel的函数。
返回数字列表中数字的等级。一个等级 number是相对于列表中其他值的大小。 (如果你去的话 对列表进行排序,数字的等级将是它的位置。)
也就是说,取一个(比如15个)数组,其中一些可能是相同的,检查数组中的任何数字,并确定它所拥有的数组中的哪个等级。数组中的最大数字被分配为1,相同的数字应该保持相同的排名。有人能说清楚这个吗?
答案 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.