数组最值获取函数空数组返回异常问题求助
问题分析与解决
问题根源
- 空数组判断逻辑失效:JavaScript里数组属于引用类型,
numbers === []是在比较两个数组的内存地址,而每次写[]都会生成新的数组对象,所以这个判断永远返回false,根本触发不了返回空对象的逻辑。 - 代码执行顺序不合理:你先执行了
Math.max(...numbers)和Math.min(...numbers),当传入空数组时,这两个方法没有接收任何参数,Math.max()会返回-Infinity,Math.min()会返回Infinity,后续的空数组判断即使生效,也已经提前生成了这两个异常值。
修正后的代码
function findBiggestAndSmallest(numbers) { // 先判断数组是否为空,用length属性是最直接可靠的方式 if (numbers.length === 0) { return {}; } const biggest = Math.max(...numbers); const smallest = Math.min(...numbers); return { biggest, smallest }; } console.log(findBiggestAndSmallest([])); // 输出 {} console.log(findBiggestAndSmallest([2,1,5,100,20])); // 输出 { biggest: 100, smallest: 1 }
可选优化(兼容非数组输入)
如果需要处理传入非数组参数的情况,可以增加类型校验:
function findBiggestAndSmallest(numbers) { // 先检查是否为数组且不为空 if (!Array.isArray(numbers) || numbers.length === 0) { return {}; } const biggest = Math.max(...numbers); const smallest = Math.min(...numbers); return { biggest, smallest }; }
内容的提问来源于stack exchange,提问作者Vincenzo Chiovaro
相关产品推荐
相关产品推荐

