Javascript JS排行榜综合排序头2头
就我所能搜索的堆栈溢出答案而言,这不是“正常”的排行榜排序问题。 我有一个我用javascript(angular 2)处理的排行榜,我可以根据胜利、玩的游戏等进行排序:Javascript JS排行榜综合排序头2头,javascript,angularjs,arrays,sorting,head,Javascript,Angularjs,Arrays,Sorting,Head,就我所能搜索的堆栈溢出答案而言,这不是“正常”的排行榜排序问题。 我有一个我用javascript(angular 2)处理的排行榜,我可以根据胜利、玩的游戏等进行排序: standings.sort(function(a,b) { return b.won - a.won || a.played - b.played; }); 但是,我的排序规则需要更深入地了解排序规则: 1) 多数人获胜 2) 最少玩的游戏 3) 然后,如果有平局,计算出赢得的迎头比赛,然后计算那些迎头比赛的积分差:
standings.sort(function(a,b) {
return b.won - a.won || a.played - b.played;
});
但是,我的排序规则需要更深入地了解排序规则:
1) 多数人获胜
2) 最少玩的游戏
3) 然后,如果有平局,计算出赢得的迎头比赛,然后计算那些迎头比赛的积分差:
- 3-a)仅在第1)点和第2)点的任何平局位置之间进行头对头排序
- 3-b)仅在并列位置之间的头对头“点差”排序
standings.sort(function(a,b) {
return b.won - a.won || a.played - b.played ||
a.head2heads[TIED_TEAM_KEY].wins - b.head2heads[TIED_TEAM_KEY].wins ||
a.head2heads[TIED_TEAM_KEY].diff- b.head2heads[TIED_TEAM_KEY].diff;
});
在排行榜(我的排行榜)阵列中,每支球队对每支球队的积分和积分差异都是由每支球队的财产决定的。e、 g.每个排行榜对象看起来像:
{ "teamname": "name",
"teamcode": "code",
"won": "8",
"lost": "10",
"played": 18,
"pointsScored": 1264,
"pointsAgainst": 1345,
"pointsDiff": -81,
"head2": { "OPP_NAME_A": {}, "OPP_NAME_B": {}, ... }
standings.sort(function(a,b) {
return b.won - a.won || a.played - b.played ||
b.head2[a.teamname].home.head2wins - a.head2[b.teamname].home.head2wins ||
b.head2[a.teamname].home.head2diff - a.head2[b.teamname].home.head2diff;
});
因此,手头上的数据可以用来挑选出各个人头对人头的结果。只是需要优雅的排序根据上述标准。目前排行榜上只有16支球队(这一点不太可能改变)。因此,即使是缓慢冗长的解决方案也会有所帮助 所以我最后发现了这一点,排序函数现在看起来像:
{ "teamname": "name",
"teamcode": "code",
"won": "8",
"lost": "10",
"played": 18,
"pointsScored": 1264,
"pointsAgainst": 1345,
"pointsDiff": -81,
"head2": { "OPP_NAME_A": {}, "OPP_NAME_B": {}, ... }
standings.sort(function(a,b) {
return b.won - a.won || a.played - b.played ||
b.head2[a.teamname].home.head2wins - a.head2[b.teamname].home.head2wins ||
b.head2[a.teamname].home.head2diff - a.head2[b.teamname].home.head2diff;
});
我猜它本身并没有那么复杂,只是把这么多的数据隐藏在这么多的层下让人困惑 所以我最后发现了这一点,排序函数现在看起来像:
{ "teamname": "name",
"teamcode": "code",
"won": "8",
"lost": "10",
"played": 18,
"pointsScored": 1264,
"pointsAgainst": 1345,
"pointsDiff": -81,
"head2": { "OPP_NAME_A": {}, "OPP_NAME_B": {}, ... }
standings.sort(function(a,b) {
return b.won - a.won || a.played - b.played ||
b.head2[a.teamname].home.head2wins - a.head2[b.teamname].home.head2wins ||
b.head2[a.teamname].home.head2diff - a.head2[b.teamname].home.head2diff;
});
我猜它本身并没有那么复杂,只是把这么多的数据隐藏在这么多的层下让人困惑