2015-11-03 46 views
1

嗨我有一個遊戲,我用JavaScript創建。 我有一個排行榜,每個第十人在遊戲中的插座使一個額外的空間。因此,從人11將創建一個不同的房間,並從房間1的排行榜不會顯示在房間2中。array.sort javascript,不排序後第10人

現在的問題: 當第11個人進來時,這種情況變得不合時宜。 的代碼:

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

例如:8人顯示具有字母名稱時每個人的得分是0

A,B,C,d,E,F,G,H

例如:用11人示出了當每個人的得分是0

b,F,C,d,E,A,G,H與字母名稱,I,J,K

和0,1圍繞的那種移動和5個索引每個2秒。

它僅在第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: "" 
}; 

感謝

+5

您在這裏的唯一順序約束是在分數上,但您期望它們按字母順序返回?另外,人們的數據結構是什麼? – Dhunt

+0

如果所有分數都爲0,那麼您顯示的輸出是正確的,因爲您只是根據分數進行排序。 – forgivenson

+0

這是您想要的結果:具有相同得分的用戶仍然按照他們添加到列表的順序排序? – Culme

回答

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

感謝那個Dhunt,完美的工作,我把名稱部分更改爲ID,但因爲我們知道ID肯定會有所不同,以防萬一。 – Hawkhunter

+0

很高興我能幫到你。 – Dhunt