2011-11-21 103 views
0

我有一個名爲「Player」的對象,具有諸如「score」,「turns」,「name」等屬性。根據用戶選擇擁有的玩家數量,我創建一個球員陣列。比較來自不同對象的數組屬性值

隨着比賽的進行,我更新了每位球員的得分。我需要做的是比較當前玩家對所有其他玩家的「得分」。如果它更高,則說該玩家獲勝。目前我能做到這一點的唯一方法是創建一個包含所有玩家得分值的臨時數組,並將數組從最高位重新排列到最低位。然後我檢查當前玩家的分數是否與我的臨時數組的0索引中的分數相同。儘管這可能會引起潛在的問題,因爲兩名球員的得分相同,在這一點上,我無法將臨時陣列中的得分與其所屬球員關聯起來。

是我目前做最好的選擇?必須有一種方法來優化這一點。 感謝您的幫助!

+0

gjunkie,你可以發佈你的代碼。這將有助於他人回答。 –

+0

var winner = function(thisPlayer){ \t var playerScores = []; \t爲(I = 0; I <7;我++){ \t \t爲(I = 0; I gjunkie

回答

1

你可以只通過看在數組中的最高得分,然後看看是否是你的播放器或不。

var playerInfo = [ 
    {name: "Bob", score: 70}, 
    {name: "Jill", score: 98}, 
    {name: "Ted", score: 96} 
]; 

function findHighestScore() { 
    // assumes there is always at least one entry in the playerInfo array 
    var highestIndex = 0; 
    var highestScore = playerInfo[0].score; 
    for (var i = 1; i < playerInfo.length; i++) { 
     if (playerInfo[i].score > highestScore) { 
      highestIndex = i; 
      highestScore = playerInfo[i].score; 
     } 
    } 
    return(highestIndex); 
} 
+0

嗨jfriend00,這看起來可能有用!很簡單,當你看到它寫下來。當然,現在我有更新每個球員的分數值的問題,所以我不能完全測試它... – gjunkie

+0

我回去找出我的其他錯誤。這個解決方案就像一個魅力。謝謝! – gjunkie

0

爲什麼你不能迭代玩家陣列並簡單地檢查每個玩家與當前玩家的分數?

而不是保持一系列的分數,你可以保持一個按他們的分數排序的球員陣列?

這有幫助嗎?

http://www.javascriptkit.com/javatutors/arraysort2.shtml

+0

嗨Eric,我的問題是我有一個Winner()函數來檢查是否有勝者。這個函數在每個玩家回合結束時運行,我把它傳遞給運行它的玩家:Winner(player2)。所以我可以看到player2的得分,但我需要看看它是否高於其他玩家,無論有多少玩家。 – gjunkie

+0

如此環繞所有玩家,並檢查傳入玩家的得分是否高於其他所有玩家。一旦你找到一個更高的,你可以停下來。 –

+0

對,我想這正是我想要做的,但我不知道如何。你有一個例子嗎? – gjunkie