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

Express.js中生成嵌套分类的递归函数不返回值,children为空如何解决?

问题原因

你的代码问题出在ObjectId类型和字符串的全等比较不匹配:

  • Mongoose查询返回的分类_id是ObjectId类型的对象,而数据库中存储的parentId是字符串格式,直接用===比较会因为类型不同返回false,导致匹配不到对应父分类的子分类。
  • 根分类的判断条件也可以优化得更兼容。

修复方案

修改createCategory递归函数,将比较的字段统一转为字符串后再判断:

const createCategory = (categories, parentId = null) => {
    const categoryList = []
    let category
    if (parentId === null) {
        // 兼容parentId为undefined、null两种根分类情况
        category = categories.filter(cat => !cat.parentId);
    } else {
        // 统一转为字符串后再比较
        category = categories.filter(cat => String(cat.parentId) === String(parentId))
    }
    category.forEach((cate) => {
        categoryList.push({
            _id: cate._id,
            name: cate.name,
            slug: cate.slug,
            children: createCategory(categories, cate._id)
        })
    })
    return categoryList
}

效果验证

修改后再次请求接口,Mobile分类下会正确返回Oppo、Samsung、Nokia、Nokia 2.4四个子分类。如果需要实现三级分类(比如把Nokia 2.4归为Nokia的子分类),只需要把对应数据的parentId改为Nokia分类的id即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:12:03