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

JS数组去除最高最低值求和函数无法通过测试的问题排查

错误原因

你的边界判断逻辑存在本质错误,根本没有正确识别需要返回0的场景:

  • 你写的array < 1是依赖JS隐式类型转换的错误写法:数组和数字比较时会被尝试转成数字,完全无法正确判断数组长度。比如传入单元素数组[5]时,数组转数字结果为5,5 < 1返回false,会错误进入后续求和逻辑;传入多元素数组时转换结果为NaN,所有比较都返回false,长度不足3的数组也会走到求和步骤。
  • 判断顺序存在隐患:你先执行array < 1再判断array == null,如果传入undefined,undefined < 1返回false,后续对undefined做展开操作会直接抛出类型错误。
  • 没有覆盖全量边界场景:逻辑要求所有长度小于3的输入(空数组、单元素数组、双元素数组)、空值输入都要返回0,你的判断逻辑完全漏过了元素值大于等于1的单/双元素数组场景。以单元素数组[3]为例,走到求和逻辑后:
    1. 无初始值的reduce在单元素数组上直接返回元素本身3
    2. Math.max(...[3])和Math.min(...[3])结果都是3
    3. 最终计算结果为3 - 3 -3 = -3,和预期返回0的要求不符,自然无法通过测试。
      你本地测试[-3]能返回0只是巧合:[-3]转数字是-3,刚好满足-3 < 1的判断条件触发返回0,不代表逻辑正确。
修正方案

不要用隐式转换做判断,直接校验输入合法性和数组长度,修正后代码如下:

function sumArray(array) {
  // 先判断空值,再判断数组长度是否满足计算要求
  if (array == null || array.length < 3) return 0;
  const sum = array.reduce((a, b) => a + b, 0);
  return sum - Math.max(...array) - Math.min(...array);
}

// 测试用例
console.log(sumArray([-3])) // 0 符合预期
console.log(sumArray([3])) // 0 修复后返回正确
console.log(sumArray([1,2])) // 0 修复后返回正确
console.log(sumArray([6, 2, 1, 8, 10])) // 16 计算逻辑正确:总和27 - 10 -1 =16
console.log(sumArray(null)) // 0 运行不报错

注意:给reduce传入初始值0是更稳妥的写法,避免空数组调用reduce抛错,虽然前面已经做了长度判断,但加初始值不会有额外副作用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:48:33