3 回答
TA贡献1735条经验 获得超5个赞
你可以
将值与索引一起存储在数组中,
按值排序,
将排名映射到给定的值和索引,
按索引排序得到数组的原始排序,
拿排名。
function rankings(array) {
return array
.map((v, i) => [v, i])
.sort((a, b) => b[0] - a[0])
.map((a, i) => [...a, i + 1])
.sort((a, b) => a[1] - b[1])
.map(a => a[2]);
}
console.log(rankings([10, 5, 20])); // 2 3 1
TA贡献1827条经验 获得超9个赞
在 ES6 中变得更容易:
function rankings(arr) {
const sorted = [...arr].sort((a, b) => b - a);
return arr.map((x) => sorted.indexOf(x) + 1);
};
console.log(rankings([10, 5, 20]));
考虑多个重复条目的另一种方法。
function rankDuplicate(arr) {
const sorted = [...new Set(arr)].sort((a, b) => b - a);
const rank = new Map(sorted.map((x, i) => [x, i + 1]));
return arr.map((x) => rank.get(x));
}
console.log(rankDuplicate([10, 10, 5, 20]));
TA贡献1876条经验 获得超6个赞
试试这个
function rankings(arr){
// add whatever parameters you deem necessary....good luck!
var sorted = arr.slice().sort(function(a,b){return b-a})
var ranks = arr.slice().map(function(v){ return sorted.indexOf(v) + 1});
return ranks;
}
rankings([10, 5, 20]); // [2, 3, 1]
我只是将 1 添加到从 0 开始的索引
添加回答
举报