遍历带有数组的嵌套对象

时间:2019-08-20 09:20:02

标签: javascript arrays object

我有以下对象:

{
    "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 中的对象对我不起作用

1 个答案:

答案 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(", "));
});