我有以下对象:
{
"models": [
{
"_id": "5d4a9c6a9b2de73738c7e15b",
"children": [
{
"id": "a1",
"name": "a1",
"children": [
{
"id": "a2",
"name": "a2",
"children": [
{
"id": "a3",
"name": "a3",
"children": [],
"data": {
"importance": 3
}
},
{
"id": "a4",
"name": "a4",
"children": [
{
"id": "a5",
"name": "a5",
"children": [],
"data": {
"importance": 4
}
}
]
}
]
}
]
},
{
"id": "a6",
"name": "a6",
"children": [
{
"id": "a7",
"name": "a7",
"children": [
{
"id": "a8",
"name": "a8",
"children": [
{
"id": "a9",
"name": "a9",
"children": [],
"data": {
"importance": 2
}
}
]
}
]
}
]
}
]
}
]
}
我想遍历整个对象和他的孩子,所以我可以获取最后一个孩子的ID,在上面的示例中,我要获取父a1 具有孩子a3和a5 ,并且父级a6 具有子级a9 。
在我的主对象中有一个带有嵌套对象的数组,所以我 .. in 中的对象对我不起作用
答案 0 :(得分:1)
您可以使用递归函数来获得所需的结果。请参阅下面的解决方案。
const data = {
"models": [{
"_id": "5d4a9c6a9b2de73738c7e15b",
"children": [{
"id": "a1",
"name": "a1",
"children": [{
"id": "a2",
"name": "a2",
"children": [{
"id": "a3",
"name": "a3",
"children": [],
"data": {
"importance": 3
}
},
{
"id": "a4",
"name": "a4",
"children": [{
"id": "a5",
"name": "a5",
"children": [],
"data": {
"importance": 4
}
}]
}
]
}]
},
{
"id": "a6",
"name": "a6",
"children": [{
"id": "a7",
"name": "a7",
"children": [{
"id": "a8",
"name": "a8",
"children": [{
"id": "a9",
"name": "a9",
"children": [],
"data": {
"importance": 2
}
}]
}]
}]
}
]
}]
};
function getLastChildren(obj, lastChildren) {
if (obj.children.length) {
obj.children.forEach((child) => {
getLastChildren(child, lastChildren)
});
} else {
lastChildren.push(obj);
}
}
data.models[0].children.forEach((child) => {
console.log("Parent ", child.id);
const children = [];
getLastChildren(child, children);
console.log("Children ", children.map(c => c.id).join(", "));
});