我很擅长使用Javascript并尝试对对象进行排序。
我拥有的是数组playerLst中的对象Player。每个玩家都有属性名称,得分,系数和比例,当然还有这个地方(来自非英语国家,这可能是一个更好的词,我在桌子上描述他的位置,例如,第一,第二个三分之一左右。)
所以我想用他们的得分,系数和比例对球员进行排序,并根据他们的位置得到他们的位置。
我认为最简单的方法是做一个小小的游戏示例:
Player1.name = A;
Player1.score = 5;
Player1.coeficent = 4;
Player1.ratio = "22:8";
Player2.name = B;
Player2.score = 5;
Player2.coeficent = 6;
Player2.ratio = "24:8";
Player3.name = C;
Player3.score = 6;
Player3.coeficent = 2;
Player3.ratio = "1:0";
Player4.name = D;
Player4.score = 4;
Player4.coeficent = 3;
Player4.ratio: "10:5";
Player5.name = E;
Player5.score = 4;
Player5.coeficent = 3;
Player5.ratio: "8:5";
playerLst = [Player1, Player2, Player3, Player4, Player5];
所以目前我们可以看到明显的赢家是Player3,因为他拥有最高分数。所以Player3.place应该在sort = 1之后。播放器1&玩家2得分相等,这意味着他们的系数将被测量。 Player2有更高的系数,因此他获得.place = 2而玩家1得到.place = 3.现在我们仍然有两个玩家,D& E,将测量具有相同分数和系数的比率。玩家D的比率高于E,因此玩家D获得.place = 4且玩家E .place = 5。
我已经好几个小时处理了这个问题并且我的大脑正在融化,我试图用不同的周期来做这个但是仍然出现了一些错误。如果有人能提供有用的东西,我会很感激。谢谢!
E2: 添加了jsfiddle,比较应该如何 http://jsfiddle.net/4ep7k7yf/
E3:
这是我的比较功能:
function suuremKuiTeine(player1,player2){
if (player1.punkte > player2.punkte){
return 1;
}
else if (player2.punkte > player1.punkte){
return -1;
}
else{ //scores are equal
if (player1.koef > player2.koef){
return 1;
}
else if (player2.koef > player1.koef){
return -1;
}
else{ //coeficents are equal
ratio1 = player1.suhe;
ratio_split = ratio1.split(":");
ratio1 = parseInt(ratio_split[0])-parseInt(ratio_split[1]);
ratio2 = player2.suhe;
ratio_split = ratio2.split(":");
ratio2 = parseInt(ratio_split[0])-parseInt(ratio_split[1]);
if (ratio1 > ratio2){
return 1;
}
else if (ratio2 > ratio1){
return -1;
}
else{
return 0;
}
}
}
}
通过一些警示魔法,我发现正确计算了比率,得分和系数。然而,在无尽的警报结束后
playerLst = playerLst.sort(suuremKuiTeine); //is global variable!
for (var i = 0; i<playerLst.length;i++){
alert(playerLst[i].name);
}
值仍然相同。我做错了什么?