You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中按指定规则筛选数组中的前2支球队?

按规则筛选晋级球队的简洁实现方案

嘿,这个问题我太懂了!完全不用写一堆繁琐的if-else去挨个判断每种情况,JavaScript的数组sort()方法就能完美适配你的优先级规则,一步搞定排序和筛选。

先明确你的数据和规则:

原始数据

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

字段含义

  • p: Points(积分)
  • gs: Goals Scored(进球数)
  • ga: Goals Against(失球数)
  • gd: Goal Difference(净胜球)

筛选规则(优先级从高到低)

  1. 积分高的晋级
  2. 积分相同则看净胜球,净胜球高的晋级
  3. 净胜球相同则看进球数,进球数多的晋级
  4. 三者均相同,随机决定结果

核心实现代码

我们可以利用Array.sort()的自定义比较函数,把优先级逻辑按顺序嵌入进去:

// 先复制原数组,避免修改原始数据
const sortedTeams = [...arr].sort((teamA, teamB) => {
  // 第一优先级:积分降序
  if (teamA.p !== teamB.p) {
    return teamB.p - teamA.p;
  }
  // 第二优先级:净胜球降序
  if (teamA.gd !== teamB.gd) {
    return teamB.gd - teamA.gd;
  }
  // 第三优先级:进球数降序
  if (teamA.gs !== teamB.gs) {
    return teamB.gs - teamA.gs;
  }
  // 三者都相同,随机排序(返回-0.5到0.5之间的随机数,sort会随机调整顺序)
  return Math.random() - 0.5;
});

// 取出前2支晋级球队
const qualifiedTeams = sortedTeams.slice(0, 2);
console.log(qualifiedTeams);

代码解释

  • 用[...arr]创建原数组的副本,这样排序操作不会改动原始数据,保持数据的纯净性
  • 比较函数按照你的规则优先级依次判断:每一层只处理当前维度的差异,不同就返回差值(降序用b - a),相同则自动进入下一层判断
  • 最后三者都相同时,Math.random() - 0.5会生成随机的正负值,让sort()随机调整这两个球队的位置,完美实现随机决定的需求

这种写法的好处是逻辑完全贴合规则,结构清晰易维护,不用去枚举所有可能的情况,每一步只聚焦当前优先级的判断,非常高效。

内容的提问来源于stack exchange,提问作者nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:06:27