Javascript 如何循环类别以获取子类别并在其中创建嵌套的子类别数组?
我有以下类别对象数组,其中包含类别Id、类别名称和子类别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":"
{
"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"]
}]
}
要做到这一点,你需要把问题分成两部分
我希望这些代码示例能够帮助您找到实现目标的方法 您可以使用
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);