从具有子对象的对象列表中检索外部键

时间:2021-01-18 12:06:41

标签: javascript json

我正在使用 fetch 来检索 json 文件。 json 文件返回对象列表。每个对象也有一个对象。我正在尝试控制台记录外部对象。下面是文件的内容。从下面的数据中,我试图记录这个列表 ['CNDNET','Acropolis','Other']。如果我使用 Object.keys(data),我会得到一个整数列表 [0,1,2]。谢谢。

[
   {
      "CNDNET":{
         "application":[
            {
               "Elastic":[
                  "Missing Data",
                  "No Data/Data Feed Down",
                  "Content/Feature Request",
                  "Access Issue"
               ]
            },
            {
               "Kibana":[
                  "Website Access Issue",
                  "Access Issue",
                  "Site Down"
               ]
            },
            {
               "Logstash":[
                  "Missing Data",
                  "No Data/Data Feed Down",
                  "Content/Feature Request",
                  "Access Issue"
               ]
            },
            {
               "Kafka":[
                  "Missing Data",
                  "No Data/Data Feed Down",
                  "Content/Feature Request",
                  "Access Issue"
               ]
            },
            {
               "Phoenix":[
                  "Missing Data",
                  "No Data/Data Feed Down",
                  "Content/Feature Request",
                  "Access Issue"
               ]
            },
            {
               "Outlook":[
                  "Access Issue"
               ]
            },
            {
               "Domain Account":[
                  "Access Issue"
               ]
            },
            {
               "Token":[
                  "Access Issue"
               ]
            },
            {
               "Software":[
                  "Authenticate",
                  "Firefox",
                  "Swift"
               ]
            },
            {
               "Hardware":[
                  "Monitor",
                  "Printer"
               ]
            }
         ]
      }
   },
   {
      "Acropolis":{
         "application":[
            {
               "ACT":[
                  "Missing Data",
                  "No Data/Data Feed Down",
                  "Content/Feature Request",
                  "Access Issue"
               ]
            },
            {
               "ARTEMIS":[
                  "Missing Data",
                  "No Data/Data Feed Down",
                  "Content/Feature Request",
                  "Access Issue"
               ]
            }
         ]
      }
   },
   {
      "Other":{
         "application":[
            {
               "CMIS":[
                  "Website Access Issue",
                  "Other",
                  "Access Issue"
               ]
            },
            {
               "SharePoint":[
                  "Access Issue",
                  "Other"
               ]
            },
            {
               "GTMS":[
                  "Access Issue",
                  "Other"
               ]
            },
            {
               "Other":[
                  "Other"
               ]
            }
         ]
      }
   }
]

2 个答案:

答案 0 :(得分:1)

实际上在顶级 data 数组中包含三个对象。您可以使用 flatMap() 遍历这些,为每个返回 Object.keys()

const data = [{ "CNDNET": { "application": [{ "Elastic": ["Missing Data", "No Data/Data Feed Down", "Content/Feature Request", "Access Issue"] }, { "Kibana": ["Website Access Issue", "Access Issue", "Site Down"] }, { "Logstash": ["Missing Data", "No Data/Data Feed Down", "Content/Feature Request", "Access Issue"] }, { "Kafka": ["Missing Data", "No Data/Data Feed Down", "Content/Feature Request", "Access Issue"] }, { "Phoenix": ["Missing Data", "No Data/Data Feed Down", "Content/Feature Request", "Access Issue"] }, { "Outlook": ["Access Issue"] }, { "Domain Account": ["Access Issue"] }, { "Token": ["Access Issue"] }, { "Software": ["Authenticate", "Firefox", "Swift"] }, { "Hardware": ["Monitor", "Printer"] }] } }, { "Acropolis": { "application": [{ "ACT": ["Missing Data", "No Data/Data Feed Down", "Content/Feature Request", "Access Issue"] }, { "ARTEMIS": ["Missing Data", "No Data/Data Feed Down", "Content/Feature Request", "Access Issue"] }] } }, { "Other": { "application": [{ "CMIS": ["Website Access Issue", "Other", "Access Issue"] }, { "SharePoint": ["Access Issue", "Other"] }, { "GTMS": ["Access Issue", "Other"] }, { "Other": ["Other"] }] } }]

const dataKeys = data.flatMap(o => Object.keys(o));

console.log(dataKeys);

如我的评论中所述,直接在 Object.keys() 数组上调用 data 只会返回数组的整数索引。 ([0,1,2])

答案 1 :(得分:1)

您可以遍历数组并返回键并将其存储在变量中。稍后,使用 concat()flat() 方法将二维数组转换为一维数组,如下图所示。

let result = arr.map((item) => {
  return Object.keys(item)
})

console.log(result.flat())
console.log([].concat(...result))
相关问题