Javascript JS排行榜综合排序头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) 然后,如果有平局,计算出赢得的迎头比赛,然后计算那些迎头比赛的积分差:

就我所能搜索的堆栈溢出答案而言,这不是“正常”的排行榜排序问题。

我有一个我用javascript(angular 2)处理的排行榜,我可以根据胜利、玩的游戏等进行排序:

standings.sort(function(a,b) {
 return b.won - a.won || a.played - b.played;
});
但是,我的排序规则需要更深入地了解排序规则:

1) 多数人获胜

2) 最少玩的游戏

3) 然后,如果有平局,计算出赢得的迎头比赛,然后计算那些迎头比赛的积分差:

  • 3-a)仅在第1)点和第2)点的任何平局位置之间进行头对头排序
  • 3-b)仅在并列位置之间的头对头“点差”排序
最复杂的部分(至少对我来说!)是,我只需要将头对头的胜利和积分差与第1)点和第2)点的共享位置上的胜利和积分差进行比较,而这些团队的情况只有在执行时才会知道

我想不出任何解决办法,更不用说优雅的了!下面的代码显然不起作用,我只是编造它来尝试并帮助表示我试图实现的目标:

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;
});
我猜它本身并没有那么复杂,只是把这么多的数据隐藏在这么多的层下让人困惑