2011-03-19 81 views
1

我需要帮助我的比赛得分表。关于JavaScript中的领导委员会(数组)帮助我请

-1-我有4个变量:

var Player1Score= 44; 
var Player2Score= 12; 
var Player3Score= 45; 
var Player4Score= 26; 

--2--我让一个阵列:

var MyArray=[Player1Score,Player2Score,Player3Score,Player4Score]; 

--3--排序阵列:

MyArray.Sort(); 

--4--打印:

---------- ----------榜

   45 

       44 

       26 

       12 

我的问题是:我怎么能打印命令的名字?

这样的:

---------- ----------榜

PLAYER 3    45 

PLAYER 1    44 

PLAYER 4    26 

PLAYER 2    12 

在此先感谢。问候

+0

你有没有看过我提出的答案? – 2011-03-21 20:14:36

回答

1

这里有一个的jsfiddle显示它http://jsfiddle.net/q2Wkh/1/

我第一次做您发布的示例中,没有任何重复,这只是有点棘手。你需要保持一个地图,玩家有一个特定分数

console.log("\n\n Without duplicates\n\n"); 
var Player1Score= 44; 
var Player2Score= 12; 
var Player3Score= 45; 
var Player4Score= 26; 
var MyArray = [Player1Score,Player2Score,Player3Score,Player4Score]; 

// Create a map of score to player number 
var scoreToPlayerNumber = {}; 
for (var i=0; i < MyArray.length; i++) { 
    // Add 1 since player 1 is slot 0 
    scoreToPlayerNumber[MyArray[i]] = "Player " + (i + 1) ; 
} 
// You wanna sort backwards 
MyArray.sort(function(a,b){return b-a}); 

for (var i=0; i < MyArray.length; i++) { 
    console.log (scoreToPlayerNumber[MyArray[i]] + " : " + MyArray[i]); 
} 

处理重复的分数,你的地图是跟踪哪些球员得分什么需要从比分到有这样的成绩的球员名单。我还改进了变量名称,这有助于思考问题。

console.log("\n\n With duplicates\n\n"); 
var scores = [45, 43, 42, 48, 45]; 
var scoreToPlayerNumber = {}; 
for (var i=0; i < scores.length; i++) { 
    var score = scores[i]; 
    if (!scoreToPlayerNumber[score]) { 
     scoreToPlayerNumber[score] = []; 
    } 
    scoreToPlayerNumber[score].push("Player " + (i+1)); 
} 

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

// Some scores are in the list twice, don't print them twice 
var seenScores = {}; 
for (var i=0; i < scores.length; i++) { 
    var score = scores[i]; 
    if (!seenScores[score]) { 
     var scorePlayers = scoreToPlayerNumber[score]; 
     for (var j = 0; j < scorePlayers.length; j++) { 
     console.log(scorePlayers [j] + " : " + scores[i]) 
     }   
    } 
    seenScores[score] = true; 
} 

最后。您正在使用的结构可以改进为更灵活。这是一个更简单的方式,它以不同的方式处理它。

var players = [ 
    {name: "Player 1", score: 45}, 
    {name: "Player 2", score: 41}, 
    {name: "Player 3", score: 46}, 
    {name: "Player 4", score: 44}, 
    {name: "Player 5", score: 45}, 
    {name: "Player 6", score: 43}, 
    {name: "Player 7", score: 48} 
]; 

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

for (var i=0, player; player = players[i]; i++) { 
    console.log(player.name + " : " + player.score); 
}