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

JS实现数组相等分割索引功能报错:测试用例未返回预期值3如何排查

平衡索引查找代码错误排查

功能需求

实现功能:寻找数组的索引N,使得N左侧所有整数的和等于右侧所有整数的和,不存在符合要求的索引则返回-1。

故障表现

提供的原始代码运行findEvenIndex([1,2,3,4,3,2,1])时,没有返回预期结果3,左右切片求和结果不匹配。

原始代码

function findEvenIndex(arr) {
  var sum = i => i.reduce((a, b) => a + b),
    l = arr.length;

  for (let j = 0; j <= l; j++) {
    if (sum(arr.slice(0, j - 1)) === sum(arr.slice(j, l))) {
      return j
    } else {
      continue;
    }
  }
  return -1
}

错误原因

  • 左侧切片逻辑错误:平衡索引j的左侧元素范围是索引0到j-1,slice(0,j)刚好符合该范围(slice结束索引不包含),原始代码写为slice(0,j-1)会漏掉索引j-1的元素,导致求和结果偏小。
  • 右侧切片逻辑错误:平衡索引j的右侧元素范围是索引j+1到末尾,原始代码写为slice(j,l)会包含j位置本身的元素,导致求和结果偏大。
  • 循环边界错误:数组合法索引范围是0到l-1,原始代码循环条件为j <= l,会遍历到超出数组范围的无效索引。
  • 求和函数容错不足:reduce未设置初始值0,当传入空数组(j=0时左侧为空、j为最后一位时右侧为空)时会直接抛出错误。

修正后代码

function findEvenIndex(arr) {
  // 给reduce添加初始值0,兼容空数组求和场景
  const sum = i => i.reduce((a, b) => a + b, 0);
  const len = arr.length;
  // 修正循环边界,只遍历合法索引
  for (let j = 0; j < len; j++) {
    // 修正左右切片逻辑,排除当前j位置的元素
    const leftSum = sum(arr.slice(0, j));
    const rightSum = sum(arr.slice(j + 1));
    if (leftSum === rightSum) {
      return j;
    }
  }
  return -1;
}

验证结果

调用findEvenIndex([1,2,3,4,3,2,1])可正确返回预期结果3。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:15:03