javascript - 映射具有任意数量节点的嵌套数组的最简单方法
问题描述
我有一个 JavaScript 数组,其中包含任意数量的节点,其subCategories格式如下。
{
"maDetails": [{
"categoryId": 1,
"category": "Third Party Applications",
"subCategories": [{
"categoryId": 5,
"category": "Third Party Applications6",
"subCategories": [{
"categoryId": 3,
"category": "BMC Remedy"
}]
}]
},
{
"categoryId": 1,
"category": "Third Party Applications",
"subCategories": [{
"categoryId": 3,
"category": "Third Party Applications2",
"subCategories": [{
"categoryId": 3,
"category": "BMC Remedy"
}]
}]
}
]
}
子类别可以是任何数字。我想将所有子类别映射到具有其父类别名称和 ID 的单个数组。最简单的方法是什么?
解决方案
使用递归生成器函数。
let data = { "maDetails": [{ "categoryId": 1, "category": "Third Party Applications", "subCategories": [{ "categoryId": 5, "category": "Third Party Applications6", "subCategories": [{ "categoryId": 3, "category": "BMC Remedy" }] }] }, { "categoryId": 1, "category": "Third Party Applications", "subCategories": [{ "categoryId": 3, "category": "Third Party Applications2", "subCategories": [{ "categoryId": 3, "category": "BMC Remedy" }] }] }] }
function* gen(input) {
for (let item of input) {
if (!item.subCategories) continue;
for (let { categoryId, category } of item.subCategories) {
yield { parentId: item.categoryId, parentCategory: item.category, categoryId, category, }
}
yield* gen(item.subCategories)
}
}
console.log([...gen(data.maDetails)]);
推荐阅读
- python - 来自不同目录python的测试文件中的模拟方法
- c# - C# 防止条目,因此您不会得到“索引超出数组范围”
- c++ - ContinueDebugEvent 导致我的调试器崩溃,但 x64dbg 没有
- c - fgets 如何处理回车键?
- php - SWIG & PHP 7 - 如何将二进制数据从 C 传递到 PHP(非零终止)?
- database - 为什么我的 FK 列和引用的列应该具有相同的类型?
- reporting-services - SSRS Excel 提取上的空列
- sql-server - 使用 DB2 数据在 DB1 上执行存储过程
- javascript - 如何将 ArrayBuffer 从 SubtleCrypto.sign 转换为字符串
- asp.net-mvc - 无法使用codefirst在多对多关系中保存联合表中的数据