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

如何用循环结构优化function?获取array中总分最高棋手姓名

优化计算棋手总分最高姓名的函数

需求说明:
现有名为chess_players的数组,每个元素是包含棋手姓名(name)和得分数组(points)的对象。需创建可复用函数(数组添加更多棋手时无需修改即可运行),接收该数组为参数,返回总分最高的棋手姓名。

原尝试代码:

let chess_players = [{name:"Jackson",points:[900,1000,3000,1950,5000]},{name:"Steve",points:[300,400,900,1000,2020]}]

function returnName(object){
/* 我尝试用for in循环遍历每个数组,计算每个数组的总和 */
  for (var num in object){
    var index = 0;
    var length = object.length;
    var sum = 0;
/* 我尝试返回最大值 */
    sum += object.fact[index ++]
    var maxVal = Math.max(...sum);
  }
  return array[index].name;
}

console.log(returnName(chess_players))

原代码存在的问题

  • 用for...in遍历数组不合适:for...in是为遍历对象属性设计的,遍历数组容易出现意外问题,应该用for...of或普通for循环。
  • 总分计算逻辑错误:错误使用object.fact,应该访问每个棋手对象的points数组;且只累加了一次值,没有遍历完整个得分数组。
  • Math.max使用错误:sum是单个数值,不能用展开运算符...,且这一步逻辑完全不符合“找最高总分”的需求。
  • 变量作用域错误:index、sum在循环内部每次都会被重置,无法正确累加总分。
  • 返回值逻辑错误:函数参数是object,但返回时用了未定义的array变量,且index的取值逻辑混乱。

优化后的实现方案

我们可以分两步实现:先计算每个棋手的总分,再遍历数组找出总分最高的棋手。

let chess_players = [{name:"Jackson",points:[900,1000,3000,1950,5000]},{name:"Steve",points:[300,400,900,1000,2020]}]

function getTopPlayer(players) {
  // 处理空数组的边界情况
  if (!players || players.length === 0) {
    return null;
  }
  
  let topPlayer = players[0];
  // 计算初始棋手的总分
  let topTotal = topPlayer.points.reduce((acc, curr) => acc + curr, 0);
  
  // 遍历剩余棋手,对比总分
  for (let i = 1; i < players.length; i++) {
    const currentPlayer = players[i];
    const currentTotal = currentPlayer.points.reduce((acc, curr) => acc + curr, 0);
    
    if (currentTotal > topTotal) {
      topTotal = currentTotal;
      topPlayer = currentPlayer;
    }
  }
  
  return topPlayer.name;
}

console.log(getTopPlayer(chess_players)); // 输出: Jackson

代码说明

  • 使用reduce方法快速计算得分数组的总和,简洁高效。
  • 遍历数组时维护当前总分最高的棋手和对应的总分,一次遍历即可完成对比。
  • 加入了空数组的边界处理,避免报错。
  • 函数参数命名更语义化(players代替object),代码可读性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:50:22