Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何循环类别以获取子类别并在其中创建嵌套的子类别数组?_Javascript_Arrays_Json - Fatal编程技术网

Javascript 如何循环类别以获取子类别并在其中创建嵌套的子类别数组?

Javascript 如何循环类别以获取子类别并在其中创建嵌套的子类别数组?,javascript,arrays,json,Javascript,Arrays,Json,我有以下类别对象数组,其中包含类别Id、类别名称和子类别 { "categories":[ { "id_product_cat":1, "prod_category_name":"food", "subcategory":"Pizza" }, { "id_product_cat":1, "prod_category_name":"

我有以下类别对象数组,其中包含类别Id、类别名称和子类别

{
"categories":[
{
"id_product_cat":1,
"prod_category_name":"food",
"subcategory":"Pizza"
},
{
"id_product_cat":1,
"prod_category_name":"food",
"subcategory":"Burger"
},
{
"id_product_cat":1,
"prod_category_name":"food",
"subcategory":"Chicken"
},
{
"id_product_cat":1,
"prod_category_name":"food",
"subcategory":"Sandwiches"
},
{
"id_product_cat":2,
"prod_category_name":"drinks ",
"subcategory":"Alcoholic Drinks"
},
{
"id_product_cat":2,
"prod_category_name":"drinks ",
"subcategory":"Non-alcoholic Drinks"
},
{
"id_product_cat":2,
"prod_category_name":"drinks ",
"subcategory":"Coffee"
},
{
"id_product_cat":1,
"prod_category_name":"food",
"subcategory":"Test"
}
]
}
我想循环遍历Categories数组,并返回一个新数组,该数组具有Category Id、Category name和每个不同类别的嵌套子类别数组。我期望的结果是:

{
"categories":[
{
"id_product_cat":1,
"prod_category_name":"food",
"subcategories":["Pizza","Burger","Chicken","Sandwiches"]
},
{
"id_product_cat":2,
"prod_category_name":"drinks ",
"subcategories":["Alcoholic Drinks","Non-alcoholic Drinks","Coffee"]
}]
}

要做到这一点,你需要把问题分成两部分

  • 首先,您需要将每个类别分组在一起。只需使用reduce即可。(为什么要使用reduce?以避免循环到循环,如此复杂)
  • 一旦你这样做了,你将有你的类别正确分组

  • 最后,您需要正确格式化输出,为此,只需在groupedCategories对象上使用循环即可,例如:

  • 我希望这些代码示例能够帮助您找到实现目标的方法

    您可以使用
    Array.reduce()
    收集所有类别

    let data = {
    "categories":[
    {
    "id_product_cat":1,
    "prod_category_name":"food",
    "subcategory":"Pizza"
    },
    {
    "id_product_cat":1,
    "prod_category_name":"food",
    "subcategory":"Burger"
    },
    {
    "id_product_cat":1,
    "prod_category_name":"food",
    "subcategory":"Chicken"
    },
    {
    "id_product_cat":1,
    "prod_category_name":"food",
    "subcategory":"Sandwiches"
    },
    {
    "id_product_cat":2,
    "prod_category_name":"drinks ",
    "subcategory":"Alcoholic Drinks"
    },
    {
    "id_product_cat":2,
    "prod_category_name":"drinks ",
    "subcategory":"Non-alcoholic Drinks"
    },
    {
    "id_product_cat":2,
    "prod_category_name":"drinks ",
    "subcategory":"Coffee"
    },
    {
    "id_product_cat":1,
    "prod_category_name":"food",
    "subcategory":"Test"
    }
    ]
    }
    
    let existingCategory = acc.find((checkCategory)=>{ return category.id_product_cat === checkCategory.id_product_cat });
    if(existingCategory){// checking for existing category
        existingCategory.subcategory.push(category.subcategory);
    }else{
        category.subcategory = [category.subcategory];
        acc.push(category);
    }
    return acc;
    },[]);
    console.log(categories);
    
    const output = {
      categories: Object.keys(groupedCategories).map(categoryId => ({
        id_product_cat: categoryId,
        prod_category_name: groupedCategories[categoryId].prod_category_name,
        subcategories: groupedCategories[categoryId].subCategories,
      }))
    };
    
    let data = {
    "categories":[
    {
    "id_product_cat":1,
    "prod_category_name":"food",
    "subcategory":"Pizza"
    },
    {
    "id_product_cat":1,
    "prod_category_name":"food",
    "subcategory":"Burger"
    },
    {
    "id_product_cat":1,
    "prod_category_name":"food",
    "subcategory":"Chicken"
    },
    {
    "id_product_cat":1,
    "prod_category_name":"food",
    "subcategory":"Sandwiches"
    },
    {
    "id_product_cat":2,
    "prod_category_name":"drinks ",
    "subcategory":"Alcoholic Drinks"
    },
    {
    "id_product_cat":2,
    "prod_category_name":"drinks ",
    "subcategory":"Non-alcoholic Drinks"
    },
    {
    "id_product_cat":2,
    "prod_category_name":"drinks ",
    "subcategory":"Coffee"
    },
    {
    "id_product_cat":1,
    "prod_category_name":"food",
    "subcategory":"Test"
    }
    ]
    }
    
    let existingCategory = acc.find((checkCategory)=>{ return category.id_product_cat === checkCategory.id_product_cat });
    if(existingCategory){// checking for existing category
        existingCategory.subcategory.push(category.subcategory);
    }else{
        category.subcategory = [category.subcategory];
        acc.push(category);
    }
    return acc;
    },[]);
    console.log(categories);