javascript - JS排行榜复杂排序头2头

标签 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) 然后,如果出现平局,计算出面对面获胜的比赛,然后计算这些面对面比赛的得分差异:

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

我在积分榜(我的联赛表)数组中的每支球队的属性(property)上获得了每支球队与其他球队的正面交锋胜利和积分差异。例如每个排名对象如下所示:

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

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

最佳答案

所以我最终弄清楚了,排序函数现在看起来像:

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

我想它本身并没有那么复杂,只是令人困惑的是在这么多层下隐藏了这么多数据!

关于javascript - JS排行榜复杂排序头2头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41809633/

相关文章:

javascript - 使用 XML 文件的标签和属性在 PHP 文档中循环不起作用

javascript - 如何转换 "timestamp_usec"?

javascript - 筛选 ui-grid 后选择第一个可见行

c++ - 你能在类初始化列表中定义数组大小吗

javascript - 在 JavaScript 中处理数组中的最后一项

javascript - 从 map 上删除特定标记?

javascript - 如何从数组对象中的嵌套数组中获取数据

php - 在 PHP 中,如何删除对象数组中的重复项,其中重复项定义为具有相同值的键值对的子集

angularjs - 如何检测在 AngularJS 中完成的所有图像加载

angularjs - 单元测试 Angular Controller 的初始化函数