这里有一个的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);
}
你有没有看过我提出的答案? – 2011-03-21 20:14:36