我正在创建一个锦标赛分组,团队数据存储在这样的数组中:
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显示它正在按预期工作,所以这不应该是问题。
控制台记录排行榜球队结果为空数组。
首先,需要指出的是,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);
如果这有帮助,请告诉我。