如何根据指定属性的值从最小到最大对对象数组进行排序

问题描述 投票:0回答:1

我正在创建一个锦标赛分组,团队数据存储在这样的数组中:

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

对于排名,我想将它们存储在一个新数组中,按最高“获胜”到最低排序,然后按最低到最高“损失”排序作为决胜局。结果应该是这样的:

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

我怎样才能做到这一点?

这是我尝试过的:


        // Sorting tourneyTeamsCondensed from most wins to least, outputting into standingsTeams

        for (var i = 0; i < tourneyTeamsCondensed.length; i++) {
            var insertCheck = false;
            for (var j = 0; j < standingsTeams.length; j++) {

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

        console.log(standingsTeams)

我以前曾使用过此功能,但使用的是tourneyTeams 而不是tourneyTeamsCondensed。 tourneyTeamsCondensed 是tourneyTeams,但根据共同的“名称”属性对胜负进行求和。除了用tourneyTeamsCondensed 替换tourneyTeams 的实例之外,我没有进行任何更改。

控制台日志记录tourneyTeamsCondensed显示它正在按预期工作,所以这不应该是问题。

控制台记录排行榜球队结果为空数组。

javascript arrays sorting for-loop if-statement
1个回答
0
投票

首先,需要指出的是,JSON 数据的原始格式并不完全有效,因为该对象中的所有字段都会重复多次。也许,您希望它是一个对象数组。如果是这种情况,您可以通过以下方式对数组中的对象进行排序:

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 result = tourneyTeamsCondensed.sort((a, b) => {
  const winsA = parseInt(a.wins);
  const winsB = parseInt(b.wins);
  if (winsA !== winsB) {
    return winsB - winsA;
  }
  const lossesA = parseInt(a.losses);
  const lossesB = parseInt(b.losses);
  return lossesA - lossesB;
});

console.log(result);

如果这有帮助,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.