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

如何按胜负属性排序对象数组?锦标赛排名代码异常排查

锦标赛对阵表排序问题解决

核心问题分析

你当前代码未执行循环、导致standingsTeams为空的原因很明确:

  • 你定义的tourneyTeamsCondensed是单个对象,但对象没有.length属性,外层循环i < tourneyTeamsCondensed.length的条件永远不成立(undefined < 0为false),循环直接跳过。
  • 同时你写的对象语法存在错误:同一个对象里重复的key(比如多个name、wins)会被最后一个值覆盖,实际tourneyTeamsCondensed中仅保留了Team4的数据,这也是后续排序无效的隐形问题。

解决步骤

1. 修正数据源结构

将tourneyTeamsCondensed改为对象数组,每个球队作为独立对象存储,这才是多组数据的正确存储方式:

const tourneyTeamsCondensed = [
  {"name": "Team1","wins": "2","losses": "4"},
  {"name": "Team2","wins": "3","losses": "3"},
  {"name": "Team3","wins": "3","losses": "4"},
  {"name": "Team4","wins": "4","losses": "1"}
];

2. 简化排序逻辑(推荐方案)

放弃繁琐的嵌套循环,直接使用数组原生sort()方法,同时注意将字符串类型的wins和losses转为数字再比较(避免字符串比较的逻辑错误,比如"10" < "2"):

// 复制原数组避免修改原始数据
const standingsTeams = [...tourneyTeamsCondensed];

// 按规则排序:先胜场降序,胜场相同则负场升序
standingsTeams.sort((a, b) => {
  const winsDiff = Number(b.wins) - Number(a.wins);
  if (winsDiff !== 0) return winsDiff;
  return Number(a.losses) - Number(b.losses);
});

console.log(standingsTeams);

3. 原代码的兼容修正(若需保留嵌套循环逻辑)

如果坚持使用你原来的插入排序逻辑,除了修正数据源为数组,还需将字符串转为数字再比较:

const tourneyTeamsCondensed = [
  {"name": "Team1","wins": "2","losses": "4"},
  {"name": "Team2","wins": "3","losses": "3"},
  {"name": "Team3","wins": "3","losses": "4"},
  {"name": "Team4","wins": "4","losses": "1"}
];

const standingsTeams = [];

for (var i = 0; i < tourneyTeamsCondensed.length; i++) {
  var insertCheck = false;
  for (var j = 0; j < standingsTeams.length; j++) {
    // 转换为数字后再比较
    const currentWins = Number(tourneyTeamsCondensed[i].wins);
    const currentLosses = Number(tourneyTeamsCondensed[i].losses);
    const targetWins = Number(standingsTeams[j].wins);
    const targetLosses = Number(standingsTeams[j].losses);

    if (currentWins > targetWins ||
        (currentWins === targetWins && currentLosses < targetLosses)) {
      insertCheck = true;
      standingsTeams.splice(j, 0, tourneyTeamsCondensed[i]);
      break;
    }
  }
  if (!insertCheck) {
    standingsTeams.push(tourneyTeamsCondensed[i]);
  }
}

console.log(standingsTeams);

最终效果

运行修正后的代码,standingsTeams会输出你期望的排序结果:

[
  {"name": "Team4","wins": "4","losses": "1"},
  {"name": "Team2","wins": "3","losses": "3"},
  {"name": "Team3","wins": "3","losses": "4"},
  {"name": "Team1","wins": "2","losses": "4"}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:45:06