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

前端拆分订单生成PDF:递归函数栈溢出问题求助

订单商品分页拆分解决方案

原代码问题解析

  • 参数传递错误:递归调用时遗漏了pages参数,且参数顺序混乱,导致递归无法正确累积分页结果。
  • 终止条件逻辑错误:判断order.items.length <= end不符合分页逻辑,正确的终止条件应该是start超过商品列表长度时停止。
  • 步长与需求不符:示例要求每组3条,但代码中使用+=4,逻辑矛盾。
  • 分页数据未累积:递归过程中没有将当前页数据合并到pages数组,无法生成完整结果。

修复后的递归实现

const order = {
    name: 'services',
    items: ['a', 'b', 'c', 'd', 'e', 'f', 'g'],
};

const paginate = (order, pageSize, pages = [], start = 0) => {
    const end = start + pageSize;
    const currentItems = order.items.slice(start, end);

    if (currentItems.length > 0) {
        pages.push({
            name: order.name,
            items: currentItems
        });
        return paginate(order, pageSize, pages, end);
    }
    return pages;
};

// 调用示例:按每组3条拆分
const splitOrders = paginate(order, 3);
console.log(splitOrders);

非递归实现(推荐,避免栈溢出)

如果订单商品数量极大,递归可能再次触发栈溢出,循环实现更稳妥:

const order = {
    name: 'services',
    items: ['a', 'b', 'c', 'd', 'e', 'f', 'g'],
};

const paginate = (order, pageSize) => {
    const pages = [];
    const total = order.items.length;

    for (let start = 0; start < total; start += pageSize) {
        const end = start + pageSize;
        pages.push({
            name: order.name,
            items: order.items.slice(start, end)
        });
    }
    return pages;
};

// 调用示例:按每组10条拆分(满足PDF分页需求)
const splitOrders = paginate(order, 10);
console.log(splitOrders);

代码说明

  • 灵活配置分页大小:将pageSize作为参数传入,需要每页10条时直接传10即可。
  • 递归实现:利用默认参数初始化分页结果和起始索引,每次递归处理完当前页后,传递更新后的起始位置。
  • 非递归实现:通过循环遍历截取商品区间,彻底规避栈溢出风险,适合大数据量场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:51:07