如何使用或不使用 lodash 正确地迭代和解析 javascript 中的嵌套对象

How to properly iterate and parse nested objects in javascript with or without lodash

我目前正在开发一项服务,该服务return具有以下负载:

{
  "account1": {
    "app1": {
      "status": "Online",
      "comments": "blah blah",
      "events": [
        {
          "date": "some date",
          "generated_by": "some user"
        }
      ]
    }
  },
  "account2": {
    "app1": {
      "status": "Offline",
      "comments": "blah blah bleh",
      "events": [
        {
          "date": "some date",
          "generated_by": "some user"
        }
      ]
    },
    "app2": {
      "status": "Online",
      "comments": "blah blah",
      "events": [
        {
          "date": "some date",
          "generated_by": "some user"
        }
      ]
    }
  }
}

我正在尝试使用以下字段呈现 table:

-------------------------------
Application | Account  | Status
-------------------------------
app1        | account1 | Online
app1        | account2 | Offline
app2        | account2 | Online    

如果我的有效载荷类似于对象列表,通常这很容易做到,但我有点卡在这里。

我尝试通过提取每个字段并通过执行以下操作创建新的有效负载来规范化此有效负载:

const extractAccountNumber = Object.values(payload).map(account => ({account: account}))

这会 return:

[
  {
    "account": "account1"
  },
  {
    "account": "account2"
  }
]

我想以同样的方式继续处理应用程序名称,一旦我获得所有字段,我将合并有效负载。这已被证明是非常麻烦的,我相信有一种更好、更有效的方法来实现这一点,我可能会错过。任何反馈都会帮助我理解如何使用 javascript 有或没有 lodash 来实现这一点。

可以试试

Object.entries(o).map(([accountName, value]) => ({ 
    account: accountName,
    apps: Object.entries(value)
        .map(([appName, value]) => ({name: appName, ...value }))
}))

不确定结构。将 account2 中的 app1 放在哪里 table?

先迭代一级再迭代二级:

table = [];
for (accountName in apiResponse) {
    account = apiResponse[accountName];
    for (appName in account) {
        app = account[appName];
        table.push({
            application: appName,
            account: accountName,
            status: app.status,
        });
    }
}

那么table就是这样的:

[
    {
        "application": "app1",
        "account": "account1",
        "status": "Online"
    },
    {
        "application": "app1",
        "account": "account2",
        "status": "Offline"
    },
    {
        "application": "app2",
        "account": "account2",
        "status": "Online"
    }
]