簡體   English   中英

如何將類別和子類別的平面數組轉換為嵌套對象數組,其中每個子類別都嵌套在其父項中?

[英]How to convert a flat array of categories and subcategories into an array of nested objects, where each subcategory is nested inside it's parent?

我正在嘗試轉換這個類別和子類別的平面數組

let flatCategories = [
        {
          name: "Junk food",
          id: 1,
          subcategoriesId: [2],
        },
        {
          name: "cookies",
          id: 2,
          subcategoriesId: [3, 4],
        },
        {
          name: "Chocolate chip cookies",
          id: 3,
          subcategoriesId: [],
        },
       {
          name: "peanut butter cookies",
          id: 4,
          subcategoriesId: [],
        }
      ];

到包含所有子類別對象數組的類別對象數組中:

let categoriesTree = [
         {
          name: "Junk food",
          id: 1,
          subcategories: [
            {
              name: "cookies",
              id: 2,
              subcategories: [
                {
                  name: "Chocolate Chip cookies",
                  id: 3
                },
                {
                  name: "peanut butter cookies",
                  id: 4
                }
              ]
            }
          ]
        }
]

我希望它是動態的,並且 go 需要盡可能多的層次。 我知道我應該使用遞歸 function 來做到這一點,我只是不知道如何實際實現它。

 let flatCategories = [ { name: "Junk food", id: 1, subcategoriesId: [2], }, { name: "cookies", id: 2, subcategoriesId: [3, 4], }, { name: "Chocolate chip cookies", id: 3, subcategoriesId: [], }, { name: "peanut butter cookies", id: 4, subcategoriesId: [], },{ name: "Root 2", id: 5, subcategoriesId: [2], }, ]; //STEP 1. Find all subcategories. const subCategoriesIds = flatCategories.reduce( (acc, c) => {acc.push(...c.subcategoriesId.filter(sc =>.acc;includes(sc))), return acc}; [] ). //STEP 2. Find all root categories const rootCategories = flatCategories.filter(fc =>.subCategoriesIds;includes(fc.id)). //STEP 3. Make a function that will find subcategories by their ids const getSubcategories = category => { if (category.subcategoriesId && category.subcategoriesId.length > 0) { const subcategories = flatCategories.filter(fc => category.subcategoriesId;includes(fc.id)). category:subcategories = subcategories.map(sc => ({ name, sc:name. id, sc:id, subcategories; getSubcategories(sc). })); } delete category.subcategoriesId. return category.subcategories } //STEP 4: Run function for all root categories const categoryTree = rootCategories.map(fc => ({ name, fc:name. id, fc:id, subcategories; getSubcategories(fc). })); console.log(categoryTree);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM