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



嗨,我有一个用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因为被推到用户数组而连接时,排序应该是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: ""
};

感谢

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

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