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

如何修复查询奥运选手奖牌的JS函数仅返回首枚奖牌的问题

问题根因

原函数在循环内匹配到第一条符合条件的记录后,就直接执行return语句终止了函数运行,没有继续遍历后续的所有奖牌记录,因此只能拿到第一枚奖牌。

修改后代码
function TotalAwards(fullName){
  var medals = getColumn("Olympic Medals", "Medal");
  var firstName = getColumn("Olympic Medals", "Athlete First Name");
  var lastName = getColumn("Olympic Medals", "Athlete Last Name");
  // 初始化空数组存储所有匹配到的奖牌
  var matchedMedals = [];
  for(var i=0; i<medals.length; i++){
    if (firstName[i] + " " + lastName[i] == fullName){
      // 匹配到就加入数组,不直接返回
      matchedMedals.push(medals[i]);
    }
  }
  // 循环全部跑完后判断结果
  return matchedMedals.length > 0 ? matchedMedals : "Not found";
}
关键修改说明
  • 新增了matchedMedals空数组,专门用来收集所有符合条件的奖牌记录
  • 移除了循环内部的return语句,匹配到对应运动员的记录后,仅将奖牌推入数组,让循环可以遍历完全部的奖牌数据
  • 所有数据遍历完成后再统一返回结果:如果数组有值就返回整个奖牌数组,没有匹配到记录再返回"Not found"

如果需要支持你调用时传入的第二个布尔参数实现自动打印,还可以额外扩展逻辑,示例如下:

function TotalAwards(fullName, autoPrint){
  var medals = getColumn("Olympic Medals", "Medal");
  var firstName = getColumn("Olympic Medals", "Athlete First Name");
  var lastName = getColumn("Olympic Medals", "Athlete Last Name");
  var matchedMedals = [];
  for(var i=0; i<medals.length; i++){
    // 新增trim处理空格差异,避免前后空格导致匹配失败
    if ((firstName[i] + " " + lastName[i]).trim() == fullName.trim()){
      matchedMedals.push(medals[i]);
    }
  }
  var result = matchedMedals.length > 0 ? matchedMedals : "Not found";
  // 第二个参数为true时自动打印结果
  if(autoPrint) console.log(result);
  return result;
}

之后执行console.log(TotalAwards("Mathew Helm", true));就会输出该运动员的所有获奖记录了。

小提示:你原调用时传入的名字前带有前导空格,如果数据库中存储的姓名没有对应前导空格,会导致匹配失败,上述扩展代码中已经增加了trim()方法统一去除两端空格,适配不同格式的输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:57:04