javascript - 如何遍历类别以获取子类别并在其中创建嵌套的子类别数组?
问题描述
我有以下具有类别 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来做呢?为了避免循环进入循环,所以很复杂)。
const groupedCategories = obj.categories.reduce((accumulator, element, index) => { const categoryId = element.id_product_cat; const category = element.prod_category_name; const subCategory = element.subcategory; if (accumulator[categoryId]) return { ...accumulator, [categoryId]: { ...accumulator[categoryId], subCategories: [...accumulator[categoryId].subCategories, subCategory], } }; else return { ...accumulator, [categoryId]: { prod_category_name: category, subCategories: [subCategory], } }; }, {});
完成后,您将正确分组类别。
- 最后,您需要正确格式化您的输出,为此,您可以简单地在您的 groupedCategories 对象上循环执行它,例如:
const output = { categories: Object.keys(groupedCategories).map(categoryId => ({ id_product_cat: categoryId, prod_category_name: groupedCategories[categoryId].prod_category_name, subcategories: groupedCategories[categoryId].subCategories, })) };
我希望这些代码示例可以帮助您找到实现目标的方法!
推荐阅读
- php - 停止向表中插入值
- onclick - clicking only one legend at a time: ChartJS
- angular - Angular 4 Observable subscription can't access integer number to base2[0]
- mysql - getting an undefined error when trying to findOne using sequelize with mysql and node
- mysql - 如何将 MySQL 数据库迁移到 SAP HANA
- github - Github Pages 使用 Symlink 构建失败
- javascript - 在 array[1].value = array[2].key 的情况下获取比较数组 [2] 的值
- python - 在 Scikit-learn 中使用 Smote 和 Gridsearchcv
- python - 现在在时间间隔内更改 BooleanField 值
- javascript - onClick 功能不起作用