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

JavaScript函数仅返回初始值[0,0]问题排查求助

问题分析与解决:你的函数为何始终返回[0,0]

嗨,我一眼就看到了问题所在——你代码里的switch用法完全走偏了,这直接导致你的计数永远不会更新,另外还有个小逻辑错误也在拖后腿。咱们一步步拆解:

核心问题1:错误的switch使用方式

switch语句的工作逻辑是:拿括号里的表达式(这里是element,也就是数组里的数字),和每个case后面的值做**严格相等(===)**匹配。但你现在写的case minAndMax[0] < element,这是一个布尔表达式,结果只能是true或false,而element是数字(比如10、5、20),数字和布尔值永远不可能严格相等,所以所有case都不会被触发,计数自然一直停留在初始的[0,0]。

核心问题2:最大值/最小值的判断逻辑搞混了

你注释里说minAndMax[0]是当前最大值,minAndMax[1]是当前最小值,但在判断是否打破最小值记录时,你用的是minAndMax[0] > element——这是拿当前最大值和元素比,而不是拿当前最小值minAndMax[1]比,逻辑完全错了。

修正后的代码

我把你的代码重构了一下,用更合适的if/else if结构代替switch,同时修正了逻辑错误,还优化了初始化步骤:

const scores = [10, 5, 20, 20];
function breakingRecords(scores) {
  let minAndMaxQuantity = [0, 0];
  // 直接用第一个分数初始化最大/最小值,不用在循环里判断
  let minAndMax = [scores[0], scores[0]];
  
  // 用forEach遍历更合适,因为我们不需要返回新数组,只是执行逻辑
  scores.forEach((element, index) => {
    // 第一个元素已经初始化过,跳过
    if (index === 0) return;
    
    if (element > minAndMax[0]) {
      // 打破最大值记录,更新最大值并计数+1
      minAndMax[0] = element;
      minAndMaxQuantity[0]++;
    } else if (element < minAndMax[1]) {
      // 打破最小值记录,更新最小值并计数+1
      minAndMax[1] = element;
      minAndMaxQuantity[1]++;
    }
    // 和当前最大/最小值相等的情况,什么都不用做
  });
  
  return minAndMaxQuantity;
}
console.log(breakingRecords(scores)); // 输出 [1, 1]

修正点说明

  • 初始化优化:直接用数组第一个元素初始化minAndMax,省去循环里的i==0判断,代码更简洁。
  • 遍历方式替换:把map换成forEach,因为map的作用是返回新数组,而我们只是需要遍历执行计数逻辑,forEach语义更准确。
  • 逻辑修正:用if/else if正确判断打破最大值和最小值的情况,同时修正了最小值的比较对象。
  • 去掉冗余判断:相等的情况不需要额外处理,直接跳过即可。

现在运行代码,就能得到你期望的[x,y]格式结果啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:27:54