2011-11-21 58 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