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

数组折叠递归函数返回undefined但console.log正常的问题求助

数组折叠算法问题排查

问题背景

我正在完成一道数组折叠的算法题,目标是将数组自身“折叠”指定次数,规则详情如下:

  • 若数组元素个数为奇数,保留中间元素;若为偶数,折叠点位于中间元素之间,对应位置元素按规则相加
  • 数组仅包含数字且不为空,参数runs为大于0的正整数,表示折叠次数
  • 单元素数组折叠后保持不变

实现代码

function foldArray(array, runs) {

  if (array.length === 1) {
    return array;
  }
  
  runs--;

  let middle = Math.floor(array.length / 2);
  let firstHalf = array.slice(0, middle).reverse();
  let secondHalf = array.slice(middle);
  let isOdd = firstHalf.length !== secondHalf.length;

  let result = [];

  for (let i = 0; i < secondHalf.length; i++) {
    let out;
    if (isOdd) {
      if (i === 0) {
        result.push(secondHalf[i]);
        continue;
      }
      out = secondHalf[i] + firstHalf[i - 1];
    } else {
      out = secondHalf[i] + firstHalf[i];
    }

    result.push(out);
  }

  if (runs > 0) {
    foldArray(result.reverse(), runs);
  } else {
    console.log("returning final: ", result.reverse());  
    return result.reverse();
  }
};

测试情况

  • 调用foldArray([1, 2, 3, 4, 5], 1)时,返回预期结果[6, 6, 3]
  • 调用foldArray([1, 2, 3, 4, 5], 2)时,console.log能输出正确结果[6, 9],但函数返回undefined

问题原因及解决方法

问题出在递归调用未返回结果:当runs > 0时,代码仅执行了递归调用foldArray(result.reverse(), runs),但没有将递归调用的返回值传递给上层函数,导致上层函数默认返回undefined。

修改方式很简单,在递归调用前加上return关键字:

if (runs > 0) {
  return foldArray(result.reverse(), runs);
} else {
  console.log("returning final: ", result.reverse());  
  return result.reverse();
}

递归调用本身会处理剩余的折叠次数并返回最终结果,只有将这个结果返回,才能保证整个调用链正确传递最终的折叠数组。

内容的提问来源于stack exchange,提问作者Lefeba Gougis III

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:35:01