在Javascript中按照此规则从阵列中获取前2个团队

nic*_*ick 0 javascript

我有这样一个数组:

var arr = [
    {id: 1, p: 7, gs: 11, ga: 7, gd: 4},
    {id: 2, p: 4, gs: 10, ga: 8, gd: 2},
    {id: 3, p: 3, gs: 7, ga: 9, gd: -2},
    {id: 4, p: 3, gs: 5, ga: 9, gd: -4}
];
Run Code Online (Sandbox Code Playgroud)

价值观是:

p - >积分

gs - >目标得分

ga - >目标反对

gd - >目标差异


这是事情:

我需要根据这个规则消除其中的两个:

  1. 目标差异
  2. 进球得分

所以在这种情况下,id[1]并且id[2]在他们有比其他两个更多的点之前通过.

但是,如果id[2]并且id[3]要获得相同的分数,则必须考虑目标差异.目标最大的团队有所不同.

然而,也可能有相同的目标差异,但其中一个得分更多,那么,得分更多的球队进步.

最后,如果他们有相同数量的进球和球门差异和分数,Math.random()会解决决胜局.

我不知道该怎么做,因为可能会有很多案例.有没有办法在不分别检查每个案例的情况下这样做?

Jon*_*lms 5

只需按照标准对它们进行排序:

arr.sort((a, b) => 
  b.p  - a.p  ||
  b.gd - a.gd ||
  b.gs - a.gs ||
  Math.random() - 0.5
);
Run Code Online (Sandbox Code Playgroud)

然后"消灭"最后两个,只需将它们拼接起来:

arr.splice(-2, 2);
Run Code Online (Sandbox Code Playgroud)

那就是:)