JS循环编写getTheRange极差函数时range值重复问题排查
问题根因
你的循环逻辑完全多余:循环每跑一轮就往结果数组里追加一次range,测试用例的输入数组长度为7,就会追加7个重复的8,加上之前存入的最小值、最大值,最终数组长度为9,和预期长度3不符。
另外你直接调用Math.min、Math.max拿极值的写法不符合题目要求——题目明确要求用循环实现,核心考点就是通过遍历数组自行比对找出最大、最小值,不是直接调用内置API取巧。
正确实现
按照题目要求,只需要一次遍历即可完成极值查找,循环结束后计算一次极差,最终按顺序组装三个元素返回即可,不要在循环内部做结果追加操作:
const getTheRange = arr => { // 初始化最大、最小值为数组首项 let low = arr[0] let high = arr[0] // 单循环遍历数组,同步更新极值 for (let i = 1; i < arr.length; i++) { if (arr[i] < low) low = arr[i] if (arr[i] > high) high = arr[i] } const range = high - low return [low, high, range] } // 功能验证 console.log(getTheRange([3, 2, 5, 4, 7, 9, 10])) // 输出 [2, 10, 8],完全符合预期
补充
如果不考虑题目“必须使用循环”的限制,你甚至不需要写循环,直接计算后返回即可,代码更简洁:
const getTheRange = arr => { const low = Math.min(...arr) const high = Math.max(...arr) return [low, high, high - low] }
但这种写法绕过了循环考察点,只能实现功能,无法满足题目答题要求。
内容的提问来源于stack exchange,提问作者Jesus Salomon
相关产品推荐
相关产品推荐

