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

标签 javascript arrays sorting

您好,我有一个用 javascript 创建的游戏。 我有一个排行榜,每 10 个人游戏中的 socket 就会多出一个房间。因此,第 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: ""
};

谢谢

最佳答案

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

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

关于javascript - array.sort javascript,在第 10 个人之后不排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33502816/

相关文章:

sorting - 如何在 MATLAB 中不排序的情况下从 A 中删除集合 A 和 B 的交集?

c++ - 如何从数组 C++ 中获取唯一字符串

javascript - 谷歌地图 API : Marker image positioning

javascript - 弹出内容有时出现在主要内容后面

python - 如何将具有行数组的 Dataframe 转换为 numpy 矩阵?

javascript - javascript 数组中未定义的第一个元素

objective-c - 我可以在 Objective-C 中序列化数组并在反序列化时使其所有值保持不变吗?

javascript - 使用 jQuery 改变 div 的颜色

javascript - 我如何使用 jquery mobile 在两个单独的 html 文件之间传递对象

c - 通过冒泡排序机制得到两个簇