例如,如果输入数组为[10,5,20],则输出应为[2,3,1],因为10是第二大数字,5是第三大数字,而20是最大数字。 这是我的功能:
function rankings(arr){
const result=[];
let newArr=arr.sort((a,b)=>b-a);
for (let i=0;i<arr.length;i++){
for (let j=0;j<newArr.length;j++){
arr[i]===newArr[j]? result.push(j+1): console.log('');
}
}
return(result);
}
使用此数组[10,5,20]作为输入,我的输出为[1,2,3] 排名([10,5,20]); // [2,3,1]预期输出 排名([6,8,1,12,12,4,3,9]); // [4,3,7,1,1,5,6,2]预期输出
答案 0 :(得分:4)
您还可以尝试sort
数组,然后匹配原始数组的索引。
经过修改以适应重复数字的情况
var originalArray = [10, 5, 20, 10, 20]
, setArray = [...new Set(originalArray)]
, sortedArray = [...setArray].sort((a, b) => a - b)
, dataIndex = originalArray.map(d => sortedArray.indexOf(d) + 1)
console.log(dataIndex)
答案 1 :(得分:1)
您可以对值进行排序并过滤项目,以避免相同的值具有不同的排名。
function rankings(array) {
const sorted = [...array]
.sort((a, b) => b - a)
.filter((b, i, { [i - 1]: a }) => a !== b);
return array.map(v => sorted.indexOf(v) + 1);
}
console.log(rankings([10, 5, 20])); // [2, 3, 1]
console.log(rankings([6, 8, 1, 12, 4, 3, 9])); // [4, 3, 7, 1, 5, 6, 2]
console.log(rankings([10, 5, 20, 10, 20]));