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

freeCodeCamp对称差集递归函数返回UNDEFINED问题排查

问题原因分析

核心错误是递归分支缺少返回语句:
你的函数在else分支完成当前次的对称差计算、拼接新的参数数组调用递归后,没有将递归调用的结果返回给上层调用者,函数执行完else分支的逻辑后没有明确返回值,默认就会返回undefined。
你在if分支打印的结果符合预期,说明递归终止条件(只剩1个参数时的计算逻辑)是正确的,但这个返回值只会被传递到上一层的sym(...values)调用位置,因为上层else分支没有接收并返回这个值,最终外层调用拿到的结果就是undefined。

修复方案

只需要给else分支的递归调用加上return关键字即可,修正后代码如下:

function sym(...args) {
    if (args.length == 1) {
        let result = args[0].sort((a, b) => a - b);
        return result;
    } else {
        let fArray = [];
        let aArray = args[0].filter(t => !args[1].includes(t));
        let bArray = aArray.concat(args[1].filter(t => !args[0].includes(t)));
        bArray.forEach(item => { if (!fArray.includes(item)) fArray.push(item)});
        let values = Object.values(args);
        values.splice(0, 2, fArray);
        // 新增return,把递归结果返回给上层
        return sym(...values);
    };
};
补充优化建议(可选)

可以用Set简化去重逻辑,代码会更简洁:

// 两个数组对称差计算+去重逻辑可改写为
const diff = new Set([
  ...args[0].filter(t => !args[1].includes(t)),
  ...args[1].filter(t => !args[0].includes(t))
])
const fArray = [...diff]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:45:06