2014-02-25 28 views
-1

我想循環找到最高和次高的玩家。我無法在任何地方找到說明。Javascript:查找具有最高和次高值的變量

我有以下變量: Player1 = 25 Player2 = 50 Player3 = 14

我要保存變量的最高和第二高的球員。 var highest = highestplayer; var secondhighest = secondhigest;

+2

存儲陣列內你的球員? – tymeJV

+1

你可以發表你迄今嘗試過的嗎? – ElGavilan

+0

我嘗試了幾個不同的代碼片斷,但我沒有發現它們似乎適用於我的目的。我猜這是可以用if子句來操作的,因爲玩家的數量是多餘的,但代碼會變得很長。 – user3351729

回答

1

你可以把玩家的陣列和陣列進行排序:

players = [Player1, Player2, Player3]; 
players.sort(function(x, y) { return y - x; }); 

var highest = players[0]; 
var secondhighest = players[1]; 

如果你想玩家之分,你應該考慮使用對象:

Player1 = { name: 'Player1', points: 25 }; 
Player2 = { name: 'Player2', points: 50 }; 
Player3 = { name: 'Player3', points: 14 }; 

players = [Player1, Player2, Player3]; 
players.sort(function(x, y) { return y.points - x.points; }); 

var highest = players[0]; 
var secondhighest = players[1]; 

alert(highest.name + ': ' + highest.points); 
alert(secondhighest.name + ': ' + secondhighest.points); 
+0

有了這個我能夠得到積分,但我不知道有問題的玩家(或變量)。 – user3351729

+0

如果這就是你想要的,你必須以不同的方式儲存玩家和積分。 (例如在一個對象中)你不能用'Player1 = 25'等來做你想要的。 – Mischa

+0

任何建議我將如何能夠用對象來做到這一點?我已經閱讀了關於物體的內容,但一直未能使其運行。 – user3351729

1

首先,玩家需要的不僅僅是一個存儲的整數,所以你可以知道哪個是哪個。然後他們需要在一個數組中。

var player1 = {name:"Player 1",score:"25"}; 
var player2 = {name:"Player 2",score:"50"}; 
var player3 = {name:"Player 3",score:"14"}; 
var players = [player1,player2,player3]; 

然後你可以快速循環,並拉出最高和第二。

var highestplayer, secondhighest; 
for (var i=players.length;i--;) { //quickly walks backwards through an array 
    //if highest isn't set yet, or new player beats highest 
    if (!highestplayer || players[i].score > highestplayer.score) { 
    //move highest down the ranks 
    secondhighest = highestplayer; 
    //set the new leader 
    highestsplayer = players[i]; 

    } 
    //if second not set or new player beats second 
    else if (!secondhigest || player[i].score > secondhighest.score) { 
    secondhighest = player[i]; 
    } 
} 

但是,如果你想要一個完整的排名,你需要使用排序功能

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