متین طیبی نیا
5 سال پیش توسط متین طیبی نیا مطرح شد
0 پاسخ

ایجاد تابع بازگشتی در node js برای نمایش دسته بندی چند سطحی

سلام
این لیست دسته بندی های من هستش

    /* 1 */
{
    "_id" : ObjectId("61373cd5a27081de77aa91a0"),
    "parent" : null,
    "name" : "کامپیوتر",
    "slug" : "کامپیوتر",
    "createdAt" : ISODate("2021-09-07T10:20:05.719Z"),
    "updatedAt" : ISODate("2021-09-07T10:20:05.719Z"),
    "__v" : 0
}

/* 2 */
{
    "_id" : ObjectId("61373d3cd11b349108fc8016"),
    "parent" : ObjectId("61373cd5a27081de77aa91a0"),
    "name" : "صفحه نمایش",
    "slug" : "صفحه-نمایش",
    "createdAt" : ISODate("2021-09-07T10:21:48.666Z"),
    "updatedAt" : ISODate("2021-09-07T10:21:48.666Z"),
    "__v" : 0
}

/* 3 */
{
    "_id" : ObjectId("6137b85b4e312bdbf612042e"),
    "parent" : ObjectId("61373d3cd11b349108fc8016"),
    "name" : "ال سی دی",
    "slug" : "ال-سی-دی",
    "createdAt" : ISODate("2021-09-07T19:07:07.415Z"),
    "updatedAt" : ISODate("2021-09-07T19:07:07.415Z"),
    "__v" : 0
}

من برای مرتبط سازی این لیست (بر اساس فیلد parent)از یک تابع بازگشتی استفاده کردم 👇

    async index(req, res, next) {

        let categories = [];

        let cats = await Category.find({})

        async function f(cats, parent = null) {
            for (const cat of cats) {
                if (cat.parent===parent) {
                    categories.push({
                        data: {
                            cat,
                            chileCategory: await f(cats, cat._id)
                        }
                    })
                }
            }
        }
        await f(cats,)      
        return res.json(categories);
    }

ولی این تابع کار نمیکنه و فقط دسته بندی اصلی میفرسته
(زمانی که فیلد parent مساوی null باشه یعنی دسته بندی یک دسته بندی اصلی هستش)

[
{
"cat": {
"_id": "61373cd5a27081de77aa91a0",
"parent": null,
"name": "کامپیوتر",
"slug": "کامپیوتر",
"createdAt": "2021-09-07T10:20:05.719Z",
"updatedAt": "2021-09-07T10:20:05.719Z",
"__v": 0,
"id": "61373cd5a27081de77aa91a0"
}
}
]

چطوری این مشکل حل کنم که زیر مجموعه های این دسته بندی نمایش داده بشه

@ali.bayat