javascript - 如何循环嵌套数组?

标签 javascript arrays object

我有下面的结构,我想循环遍历层次结构而不丢失任何对象。

{
  "countries": [
    {
      "name": "Denmark",
      "id": "APA1",
      "children": [
        {
          "name": "Zealand",
          "id": "APA1.1",
          "parentId": "APA1",
          "children": [
            {
              "name": "Copenhagen",
              "id": "APA1.1.1",
              "parentId": "APA1.1",
              "children": [
                {
                  "name": "Dublin",
                  "id": "ANA1",
                  "parentId": "APA1.1.1.1",
                  "hostNames": [
                    {
                      "ip": "20.190.129.1"
                    },
                    {
                      "ip": "20.190.129.2"
                    }
                  ]
                }
              ]
            }
          ]
        },
        {
          "name": "Jutland",
          "id": "APA1.2",
          "parentId": "APA1",
          "children": [
            {
              "name": "Nordjylland",
              "id": "APA1.2.1",
              "parentId": "APA1.2",
              "children": [
                {
                  "name": "Aalborg",
                  "id": "APA1.2.1.1",
                  "parentId": "APA1.2.1",
                  "children": [
                    {
                      "name": "Risskov",
                      "id": "ANA3",
                      "parentId": "APA1.2.1.1",
                      "hostNames": [
                        {
                          "ip": "40.101.81.146"
                        }
                      ]
                    },
                    {
                      "name": "Brabrand",
                      "id": "ANA4",
                      "parentId": "APA1.2.1.1",
                      "hostNames": [
                        {
                          "ip": "43.203.94.182"
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

我之所以要循环遍历层次结构,是因为我想将其变成扁平结构。所以本质上我将把每个对象移动到另一个具有我想要的结构的数组。我只是想知道如何接近 children 。

想要的结果:

"applicationGroups": [
    {
        "id" : "APA1",
        "name": "Denmark",
    },
    {
        "name": "Zealand",
        "id": "APA1.1",
        "parentId": "APA1"
    },
    {
        "name": "Copenhagen",
        "id": "APA1.1.1",
        "parentId": "APA1.1"
    },
    {
        "name": "Dublin",
        "id": "ANA1",
        "parentId": "APA1.1.1.1"
    },
    {
        "name": "Jutland",
        "id": "APA1.2",
        "parentId": "APA1"
    },
    {
        "name": "Nordjylland",
        "id": "APA1.2.1",
        "parentId": "APA1.2"
    },
    {
        "name": "Aalborg",
        "id": "APA1.2.1.1",
        "parentId": "APA1.2.1"
    },
    {
        "name": "Risskov",
        "id": "ANA3",
        "parentId": "APA1.2.1.1"
    },
    {
        "name": "Brabrand",
        "id": "ANA4",
        "parentId": "APA1.2.1.1"
    }
]

我对 JavaScript 有点陌生,我真的不知道从哪里开始,但是我给出的这个例子与我正在处理的实际例子并不相同,所以我只想要原理这样我就可以在我的实际代码中自己实现它。

最佳答案

您可以采用 flatMap 方法来递归调用展平回调。

const
    flat = ({ hostNames, children = [], ...o }) => [o, ...children.flatMap(flat)],
    data = { countries: [{ name: "Denmark", id: "APA1", children: [{ name: "Zealand", id: "APA1.1", parentId: "APA1", children: [{ name: "Copenhagen", id: "APA1.1.1", parentId: "APA1.1", children: [{ name: "Dublin", id: "ANA1", parentId: "APA1.1.1.1", hostNames: [{ ip: "20.190.129.1" }, { ip: "20.190.129.2" }] }] }] }, { name: "Jutland", id: "APA1.2", parentId: "APA1", children: [{ name: "Nordjylland", id: "APA1.2.1", parentId: "APA1.2", children: [{ name: "Aalborg", id: "APA1.2.1.1", parentId: "APA1.2.1", children: [{ name: "Risskov", id: "ANA3", parentId: "APA1.2.1.1", hostNames: [{ ip: "40.101.81.146" }] }, { name: "Brabrand", id: "ANA4", parentId: "APA1.2.1.1", hostNames: [{ ip: "43.203.94.182" }] }] }] }] }] }] },
    result = data.countries.flatMap(flat);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何循环嵌套数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60527731/

相关文章:

javascript - express + hogan 如何处理session?

javascript - 过渡破坏了 SVG 旋转

arrays - SWIFT:大量字符串的快速累积

javascript - 尝试将动画重构为类对象,如何构造其相互关联的部分

javascript - 使用键的文本字符串访问 JSON 对象的特定部分

css - TUMBLR og :image should be larger [edited: more code]

javascript - 我可以在我的项目中使用 create-react-app 吗?

javascript - 从 png 数据数组创建动画 gif

javascript - 将键值对追加到数组的特定索引处

c# - System.Array 真的实现了 ICollection 吗?