【问题标题】:Iterate object keys and get inner object's keys into one array迭代对象键并将内部对象的键放入一个数组
【发布时间】:2020-03-17 20:04:59
【问题描述】:

我正在尝试将 Object.keys 的键全部放入一个数组中,但遇到了一些困难。

目前我正在尝试这个,但我得到了每个对象键的数组 Object.keys(myObject).map(x=>Object.keys(myObject[x]))

对象:

    {
   "a1G0R000002Sv15UAC":{
      "a1K0R000000ytEsUAI":{ <---
         "test2_2":"test2"
      }
   },
   "a1G0R000002SvdYUAS":{
      "a1K0R000000yu8EUAQ":{ <---
         "test2_2":"test2"
      },
      "a1K0R000000ytEsUAI":{ <---
         "string_1":"test"
      }
   },
   "a1G0R000002T4NIUA0":{
      "a1K0R000000ytEsUAI":{ <---
         "string_1":"test"
      }
   }
}

所需数组:["a1K0R000000ytEsUAI","a1K0R000000yu8EUAQ","a1K0R000000ytEsUAI","a1K0R000000ytEsUAI"]

【问题讨论】:

    标签: javascript arrays json multidimensional-array


    【解决方案1】:

    您可以使用flat 将结果转换为单个数组”

    const myObject =     {
       "a1G0R000002Sv15UAC":{
          "a1K0R000000ytEsUAI":{ 
             "test2_2":"test2"
          }
       },
       "a1G0R000002SvdYUAS":{
          "a1K0R000000yu8EUAQ":{ 
             "test2_2":"test2"
          },
          "a1K0R000000ytEsUAI":{ 
             "string_1":"test"
          }
       },
       "a1G0R000002T4NIUA0":{
          "a1K0R000000ytEsUAI":{ 
             "string_1":"test"
          }
       }
    }
    
    const keys = Object.keys(myObject).map(key => Object.keys(myObject[key])).flat();
    
    console.log(keys)

    【讨论】:

      【解决方案2】:

      您将不得不使用 2 个for..in 循环。简单来说,for..in 循环遍历对象的键。欲了解更多信息,您可以查看MDN doc

      const originalObject = {
         "a1G0R000002Sv15UAC":{
            "a1K0R000000ytEsUAI":{ 
               "test2_2":"test2"
            }
         },
         "a1G0R000002SvdYUAS":{
            "a1K0R000000yu8EUAQ":{ 
               "test2_2":"test2"
            },
            "a1K0R000000ytEsUAI":{ 
               "string_1":"test"
            }
         },
         "a1G0R000002T4NIUA0":{
            "a1K0R000000ytEsUAI":{ 
               "string_1":"test"
            }
         }
      }
      
      const desiredArray = []
      
      for (let i in originalObject) {
        for(let j in originalObject[i]) {
          desiredArray.push(j)
        }
      }
      
      console.log(desiredArray)

      【讨论】:

      • 谢谢!我有一个类似的解决方案,但试图看看是否有可能用 .map 或其他东西而不是 2 个循环来完成这个
      • 酷。然后你应该回答@Addis 和@ferhen。但我想,如果您尝试使用 Object.keys 和 map 以获得更好的时间复杂度,我认为这两种方法的时间复杂度相同。
      【解决方案3】:

      使用map

      Object.entries(myObject).map(x => Object.keys(x[1])).flat()
      

      【讨论】:

        猜你喜欢
        • 2021-12-07
        • 2022-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-06
        相关资源
        最近更新 更多