我遇到了一个问题,我真的需要一些关于解决方案的指导。 我有一个如下所示的对象
{
"count": 3,
"tree": [
{
"name": "Parent1a",
"children": [
{
"name": "Child1a",
"children": [
{
"name": "Child2a",
"children": [
{
"name": "Child3a",
"children": [
{
"name": "Child4a",
"children": []
}
]
}
]
}
]
}
]
},
{
"name": "Parent1b",
"children": [
{
"name": "Child1b",
"children": []
}
]
}
]
}
正如您在上面的对象中看到的,
tree
是一个对象数组。上面的 tree
由 2 个名为 Parent1a
和 Parent1b
的对象组成。这些对象中的每一个都会有 children
,它也将是对象数组,并且每个 children
对象将进一步具有 children
对象数组,并且它可以在每个对象中继续 n 次。
我们希望从所有这些父对象和所有名为
name
的嵌套对象数组中获取所有 children
属性,然后将这些值放入新的对象数组中。
最终输出应该如下所示。
[
{
"id": "Parent1a",
"label": "Parent1a",
"level": 0,
},
{
"id": "Child1a",
"label": "Child1a",
"parentId": "Parent1a",
"level": 1,
},
{
"id": "Child2a",
"label": "Child2a",
"parentId": "Child1a",
"level": 2,
},
{
"id": "Child3a",
"label": "Child3a",
"parentId": "Child2a",
"level": 3,
},
{
"id": "Child4a",
"label": "Child4a",
"parentId": "Child3a",
"level": 4,
},
{
"id": "Parent1b",
"label": "Parent1b",
"level": 0,
},
{
"id": "Child1b",
"label": "Child1b",
"parentId": "Parent1b",
"level": 1,
},
]
正如您在上面的输出中看到的,
Parent1a
、Parent1b
是第一级。即这些是对象的顶级数组,因此 level
被分配给这些对象。当我们深入挖掘树时,每个子对象都会被分配到下一个级别 1、2、3,依此类推,当我们深入挖掘 children
对象数组时。类似地,每个 children
对象数组都分配有一个 id
,这是其父树的 name
。因此,Child1a
被指定为 Parent1a
作为其parentId。
有人可以让我知道如何实现这一点,因为我真的不擅长递归,并且我查看了一些 stackoverflow 帖子,但感觉与我想要实现的略有不同。 例如动态嵌套对象数组的递归迭代
以下将有助于达到预期的结果
const convertTree = (input) => {
const result = []
const traverse = (node, parentId = null, level = 0) => {
const { name, children } = node
const item = {
id: name,
label: name,
level: level,
}
if (parentId) {
item.parentId = parentId
}
result.push(item)
children.forEach((child) => traverse(child, name, level + 1))
}
input.tree.forEach((rootNode) => traverse(rootNode))
return result
}
// Example usage:
const input = {
count: 3,
tree: [
{
name: "Parent1a",
children: [
{
name: "Child1a",
children: [
{
name: "Child2a",
children: [
{
name: "Child3a",
children: [
{
name: "Child4a",
children: [],
},
],
},
],
},
],
},
],
},
{
name: "Parent1b",
children: [
{
name: "Child1b",
children: [],
},
],
},
],
}
const output = convertTree(input)
console.log(output)