JS联赛表复杂排序头2头

时间:2017-01-23 15:17:29

标签: javascript angularjs arrays sorting head

就我可以搜索堆栈溢出答案而言,不是“正常”联赛表排序问题。

我有一个在javascript(角度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;
});

在排名(我的排名表)阵列中,我对每支球队的每个球队的每个球队的每个球队的胜利和分数都有所不同。例如每个排名对象看起来像:

{   "teamname": "name",
    "teamcode": "code",
    "won": "8",
    "lost": "10",
    "played": 18,
    "pointsScored": 1264,
    "pointsAgainst": 1345,
    "pointsDiff": -81,
    "head2": { "OPP_NAME_A": {}, "OPP_NAME_B": {}, ... }

因此,数据随时可以挑选出个人头对头的结果。只需按照上述标准进行排序即可。目前,积分榜上只有16支球队(而这种情况不太可能改变)。因此,即使是缓慢的冗长解决方案也会有所帮助!

1 个答案:

答案 0 :(得分:0)

所以我最终想到了这一点,排序功能现在看起来像:

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;
});

猜测它本身并不复杂,只是混淆了如此多的数据隐藏在这么多层之下!