就我所能搜索的堆栈溢出答案而言,这不是的“正常”列表排序问题.
我有一个在javascript (角2)中使用的联赛表im,我可以根据赢球、玩的游戏等来分类:
standings.sort(function(a,b) {
return b.won - a.won || a.played - b.played;
});但是,我的排序规则需要更深入地按照以下方式进行排序:
1)多数获胜
2)玩得最少的游戏
3)如果有平局,计算出头球对头球游戏获胜,然后在头球与头球游戏中得分差异:
复杂的部分(至少对我来说!)我只需要比较一下头对头的胜利和分数的差异,在一个共同的位置上从第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支球队(这不太可能改变)。因此,即使是缓慢冗长的解决方案也是有帮助的!
发布于 2017-01-24 10:50:37
最后,我想出了这个问题,排序函数看起来如下:
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;
});我猜这本身并没有那么复杂,只是在这么多的层下隐藏了这么多的数据,让人感到困惑!
https://stackoverflow.com/questions/41809633
复制相似问题