返回原始数组的新排名数组

时间:2020-07-01 08:29:02

标签: javascript arrays

例如,如果输入数组为[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]预期输出

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]));