JavaScript中如何求数组两个最小数之和?我的代码为何测试失败?
问题排查与修复
你的代码核心问题在于排序回调函数没有返回值,导致数组无法按数值大小正确排序:
function sumTwoSmallestNumbers(numbers) { const sorted = numbers.sort((a, b) => { a - b; // 这里缺少return语句,没有返回比较结果 }); return sorted[0] + sorted[1]; }
原因解释
Array.sort() 的比较函数需要返回一个数值来决定元素顺序:
- 返回负数:
a排在b前面 - 返回0:
a和b位置不变 - 返回正数:
b排在a前面
你写了 a - b 但没有用 return 输出结果,相当于每次比较都返回 undefined,会被JS自动转换为0,数组不会按数值升序排列,自然无法正确获取最小的两个元素。
修复后的代码
两种写法都可以:
- 显式添加return:
function sumTwoSmallestNumbers(numbers) { const sorted = numbers.sort((a, b) => { return a - b; }); return sorted[0] + sorted[1]; }
- 利用箭头函数的简写(单表达式自动返回):
function sumTwoSmallestNumbers(numbers) { const sorted = numbers.sort((a, b) => a - b); return sorted[0] + sorted[1]; }
补充说明:修正后的逻辑能处理包含重复值、大数的场景,比如输入 [19, 5, 42, 2, 77],排序后会得到 [2,5,19,42,77],求和结果为7,符合预期。
内容的提问来源于stack exchange,提问作者zcode97
相关产品推荐
相关产品推荐

