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
相关产品推荐
相关产品推荐

