查找给定数组中值的等级的最快方法

时间:2018-04-22 20:37:17

标签: javascript jquery

从我的服务中我返回一个对象数组:

     data = [{id:1, value:25},{id:2, value:30}, {id:3, value:15} ]

鉴于id:3示例,我需要说在这些数据中,基于值,我需要对数据进行排序并知道id:3排名第3(30,25,14 - 递减)。 这样做最好的方法是什么? 任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:1)

只需使用.sort超过值之间的差异:

const data = [{id:1, value:25},{id:2, value:30}, {id:3, value:15} ];
data.sort(({ value: vA }, { value: vB }) => vB - vA);
console.log(data);

如果你需要弄清楚等级,只需在数组排序后迭代它:

const data = [{id:1, value:25},{id:2, value:30}, {id:3, value:15} ];
data.sort(({ value: vA }, { value: vB }) => vB - vA);
data.forEach((item, i) => console.log(`Rank ${i + 1}: ${JSON.stringify(item)}`));

答案 1 :(得分:0)

data
.map(function(d,i){return {index:d.id,value:d.value}})
.sort(function(a,b){return b.value - a.value})
.map(function(d,i){return data[d.index-1]})

Some explanation

答案 2 :(得分:0)

逻辑

  1. 使用sort数组方法

    对数据数组进行排序
    • backPrevious
      • 如果data.sort((a,b)=>{ return b.value - a.value })较低(按照您要求的降序排序),则将对象a放在较低的索引处
  2. 获取特定ID的索引

    • a
      • data.map((obj)=>{return obj.id;}).indexOf(target_id)方法将[{id:3},{id:1},...]转换为[3,1,]
      • map方法查找数组
      • 中target_id首次出现的索引
  3. 一起

    indexOf