我想循環找到最高和次高的玩家。我無法在任何地方找到說明。Javascript:查找具有最高和次高值的變量
我有以下變量: Player1 = 25
Player2 = 50
Player3 = 14
我要保存變量的最高和第二高的球員。 var highest = highestplayer;
var secondhighest = secondhigest;
我想循環找到最高和次高的玩家。我無法在任何地方找到說明。Javascript:查找具有最高和次高值的變量
我有以下變量: Player1 = 25
Player2 = 50
Player3 = 14
我要保存變量的最高和第二高的球員。 var highest = highestplayer;
var secondhighest = secondhigest;
你可以把玩家的陣列和陣列進行排序:
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);
有了這個我能夠得到積分,但我不知道有問題的玩家(或變量)。 – user3351729
如果這就是你想要的,你必須以不同的方式儲存玩家和積分。 (例如在一個對象中)你不能用'Player1 = 25'等來做你想要的。 – Mischa
任何建議我將如何能夠用對象來做到這一點?我已經閱讀了關於物體的內容,但一直未能使其運行。 – user3351729
首先,玩家需要的不僅僅是一個存儲的整數,所以你可以知道哪個是哪個。然後他們需要在一個數組中。
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 });
存儲陣列內你的球員? – tymeJV
你可以發表你迄今嘗試過的嗎? – ElGavilan
我嘗試了幾個不同的代碼片斷,但我沒有發現它們似乎適用於我的目的。我猜這是可以用if子句來操作的,因爲玩家的數量是多餘的,但代碼會變得很長。 – user3351729