array.sort javascript,不排在第10个人之后

时间:2015-11-03 15:23:18

标签: javascript arrays sorting

嗨,我有一个用javascript创建的游戏。 我有一个排行榜,每10个人在游戏中的插座增加一个空间。因此,从第11个人开始,将创建一个不同的房间,而房间1中的排行榜不会在房间2中显示。

现在问题: 当第11个人进入这种类型时会变得混乱。 代码:

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

例如:当每个人得分为0时,有8个人显示带字母的姓名

a,b,c,d,e,f,g,h

例如:当每个人得分为0时,有11个人显示带字母的姓名

b,f,c,d,e,a,g,h,i,j,k

并且排序每2秒在0,1和5个索引周围移动。

这只发生在第11个人加入时。 我已经尝试过将每个房间的人数减少到5人,但在第11个人之后仍然很奇怪。 如果有人可以解决这个问题,请告诉我。

更多信息,当一个人连接到一个房间时,他们被推送到一个users []数组,并且应始终位于默认值为0的底部。 如果您需要任何其他信息,请告诉我。

编辑: 该名称与分数相关联。我写了它,以便用户按字母顺序连接。 当用户A连接时,排序应仅以用户A结束。 然后当B连接因为他被推送到users数组时,排序应该是A然后按顺序排列B,当C连接时,同样的事情分别发生。

编辑:用户结构。

var currentPlayer = {
    id: socket.id,
    level: 1,
    x: position.x.round(2),
    y: position.y.round(2),
    angle: 0,
    score: 0,
    type: type,
    radius: radius,
    facing: 0,
    room: nameOfRoom,
    lastChatSent: 0,
    name: ""
};

由于

1 个答案:

答案 0 :(得分:2)

假设您有一个人的名字属性。如果分数匹配,则按名称排序,否则按分数排序。

users.sort(function (a, b) {
    var equal = b.score == a.score;
    if(equal){
        return a.Name < b.Name ? -1 : a.Name > b.Name ? 1 : 0;
    }
    else{
        return a.score < b.score ? -1 : a.score > b.score ? 1 : 0
    }
});