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

如何对关联的players与scores数组排序并生成玩家排名?

解决玩家分数排名排序的问题

嘿,我明白你现在卡在排序这一步了——用两个分开的数组存玩家和分数确实容易在排序时搞混对应关系,别担心,我来帮你搞定!

核心问题分析

单独维护players和scores两个数组的话,排序分数数组时,玩家数组的顺序不会同步变化,最后会出现玩家和分数不匹配的情况。所以最佳方案是把每个玩家和对应的分数包装成一个对象,放在同一个数组里,这样排序时整个“玩家-分数”单元会一起移动,完全不会错位。

完整解决方案代码

下面是补全并优化后的代码,包含录入、排序、输出全流程:

function main() {
  var players = new Array();
  var scores = new Array();
  
  // 1. 录入3位玩家的名字和分数
  for(i = 0; i < 3; i++) {
    var playerName = prompt(`请输入第${i+1}位玩家的名字:`);
    // 转成数字类型,避免字符串排序出错
    var playerScore = parseInt(prompt(`请输入${playerName}的分数:`));
    players.push(playerName);
    scores.push(playerScore);
  }
  
  // 2. 将两个数组合并为对象数组(关键步骤!)
  var playerScorePairs = [];
  for(let j = 0; j < players.length; j++) {
    playerScorePairs.push({
      name: players[j],
      score: scores[j]
    });
  }
  
  // 3. 按分数从高到低排序
  playerScorePairs.sort((a, b) => {
    // b.score - a.score 实现降序,a - b则是升序
    return b.score - a.score;
  });
  
  // 4. 输出排名结果
  console.log("最终排名:");
  playerScorePairs.forEach((item, index) => {
    console.log(`${index+1}. ${item.name}(${item.score}分)`);
  });
}

// 调用主函数
main();

更简洁的写法(直接录入对象)

其实我们可以跳过单独维护两个数组的步骤,直接在录入时创建对象数组,代码更精简:

function main() {
  var playerScorePairs = [];
  
  // 直接录入并构建对象数组
  for(i = 0; i < 3; i++) {
    var playerName = prompt(`请输入第${i+1}位玩家的名字:`);
    var playerScore = parseInt(prompt(`请输入${playerName}的分数:`));
    playerScorePairs.push({
      name: playerName,
      score: playerScore
    });
  }
  
  // 排序 + 输出
  playerScorePairs.sort((a, b) => b.score - a.score);
  console.log("最终排名:");
  playerScorePairs.forEach((item, idx) => {
    console.log(`${idx+1}. ${item.name}(${item.score}分)`);
  });
}

main();

测试你的示例

当录入Jeremy(12)、Julien(18)、Olivia(22)时,代码会输出:

最终排名:
1. Olivia(22分)
2. Julien(18分)
3. Jeremy(12分)

完全符合你的预期!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:24:40