您好,我有一个用 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/