如何按属性对对象进行排名?

docta_faustus

我正在尝试通过属性值对对象的集合进行排名。基本上,每个玩家对象都有一个得分属性,应该从最高到最低进行排名。例子:

var players = {
    player1: {
        nickname: "Bob",
        score: 100
    },
    player2: {
        nickname: "Amy",
        score: 200
    },
    player3: {
        nickname: "Grant",
        score: 300
    },
    player4: {
        nickname: "Steve",
        score: 200
    },
    player5: {
        nickname: "Joe",
        score: 500
    }
};

通过分数对这些对象进行排名应该会产生以下结果:

{
    player1: {
        nickname: "Bob",
        score: 100,
        rank: 4
    },
    player2: {
        nickname: "Amy",
        score: 200,
        rank: 3
    },
    player3: {
        nickname: "Grant",
        score: 300,
        rank: 2
    },
    player4: {
        nickname: "Steve",
        score: 200,
        rank: 3
    },
    player5: {
        nickname: "Joe",
        score: 500,
        rank: 1
    }
}

重要的是分数相同的对象应具有相同的等级。

据我所知:

var array = [];

for (var key in players) {
    array.push(players[key]);

}

array.sort(function(a, b){
    return a.score - b.score;
});

for (var i = 0; i < array.length; i++) {
    array[i].rank = i + 1;
}

这样会按照得分的顺序为每个对象分配“等级”属性,但是如何为绑定的对象赋予相同的等级编号?

JS小提琴

帖木儿·比拉洛夫(Timur Bilalov)

jsfiddle:https ://jsfiddle.net/2khtnjxw/1/

// change sort function
array.sort(function(a, b){
    return b.score - a.score;
});

var rank = 1;
for (var i = 0; i < array.length; i++) {
  // increase rank only if current score less than previous
  if (i > 0 && array[i].score < array[i - 1].score) {
    rank++;
  }
    array[i].rank = rank;
}

// result: 
[  
   {  
      "nickname":"Joe",
      "score":500,
      "rank":1
   },
   {  
      "nickname":"Grant",
      "score":300,
      "rank":2
   },
   {  
      "nickname":"Amy",
      "score":200,
      "rank":3
   },
   {  
      "nickname":"Steve",
      "score":200,
      "rank":3
   },
   {  
      "nickname":"Bob",
      "score":100,
      "rank":4
   }
]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java-按属性对对象进行分组和排序

按值对对象属性进行排序

如何最好地按属性或方法对对象数组进行排序?

按对象属性对对象的ArrayList进行排序

按日期属性对对象列表进行排序

按属性对对象数组进行排序

按多个属性对对象进行排序

如何对对象集合进行排名

按嵌套属性对对象进行排序

如何按对象的值对对象数组进行分组并在新属性中求和

按嵌套对象属性对对象数组进行排序

如何使用自定义管道在Angular中按属性值对对象数组进行排序?

按属性对对象列表进行分组

如何按其两个属性的降序对对象数组进行排序

按2个属性对对象数组进行排序

按对象的属性以外的对象对对象列表进行分组

如何按列表中的属性对对象进行分组和计数?

按对象属性对对象字典进行分组

如何按对象属性之一对对象属性进行排序(不对数组进行排序)?

C#如何按任何属性对对象列表进行排序

按属性对对象javascript数组进行排序

如何按对象的子对象字段对对象进行排序?

如何按存储在索引处的嵌套对象属性对对象数组进行排序?

如何按对象属性对对象进行分组

如何根据属性对对象进行分组

如何仅使用一个函数按属性对对象数组进行排序?

如何按属性 PHP 对对象数组进行排序

如何按属性值对对象数组进行排序

在javascript中,如何按对象的属性对对象集合进行排序?