使用javascript

时间:2015-05-02 10:49:45

标签: javascript sorting

我很擅长使用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);
}

值仍然相同。我做错了什么?

0 个答案:

没有答案