在jQuery中对用户分数进行排名

时间:2017-06-09 05:03:21

标签: jquery

我有一个数组,其中包含600条记录,格式为:

[ Mac     14
  John    12
  abc     12  
  bill    16  ]

我正在尝试为上面创建一个排名模型,在某种意义上,bill有rank1,mac为rank 2,john,abc为rank3并将其推回到数组。例如

[ Mac     14  2
  John    12  3
  abc     12  3
  bill    16  1 ]

以下是我尝试过的代码:

    var items = data.d.results;

if(items.length > 0){
for (i = 0; i < items.length; i++) { 
 playerDetails.push( items[i].Title , items[i].Points );    
 }
 var scores = playerDetails.map(function(d) { return d[1]; }).sort().reverse();
   console.log(playerDetails);  

初始的playerdetails数组包含以下格式的数据:

{John, Nikhil C.,467},{Cule, Mac A.,341},{Pat, Ryan,465}

  [
      [0...99]: [
         [0...9]: [
            0: "{John, Nikhil C.",
            1: "467}",
            2: "{Cule, Mac A.",
            3: "341}",
            4: "{Pat, Ryan",
            5: "465}",

         ],

这在jQuery中是否可行?如果是的话,如何实现呢? 感谢

1 个答案:

答案 0 :(得分:5)

这在javascript中是可能的,不需要jQuery。

此示例引入了一个新的分数数组,用于排序目的:

var data = [['Mac', 14],['John', 12],['abc',12],['bill',16]];

var scores = data.map(d => d[1]).sort().reverse();
data = data.map(d => d.concat([scores.indexOf(d[1])+1]));

如果您不介意根据分数对整个数据集进行排序,则可以完全在原始数据中进行操作。然后,您可以在迭代中使用当前位置进行排名,并仅检查当前项目与前一项目排名相同的极端情况:

data
  .sort((a,b) => b[1] - a[1])
  .forEach((d,i,a) => d.push(i > 0 && a[i-1][1] == d[1] ? a[i-1][2] : i+1));