Я пытаюсь получить все ключевые имена 2 уровня в объекте (возможно, в будущем).

Например, данный объект, как:

myThing = {
   'someKeyTopLevel1': {
      'someKeySecondLevel1': [
         ... very large data here ...
      ],
     'someKeySecondLevel5': [
         ... very large data here ...
      ]
   },
   'someKeyTopLevel2': {
      'someKeySecondLevel1': [
         ... very large data here ...
      ],
      'someKeySecondLevel2': [
         ... very large data here ...
      ],
      'someKeySecondLevel3': [
         ... very large data here ...
      ]
   }
   ...
}

Желаемый результат будет массивом «someKeySecondLevel1», «someKeySecondLevel2», 3, 5 и т. Д.

Я думал сделать что-то вроде (псевдокод):

  • Возьмите все ключи с верхнего уровня (Object.keys(myThing) )
  • Перебирайте эти ключи и получайте записи, получайте ключи в этих записях, используя Object.keys(...) снова.

Есть ли более стандартный / быстрый / лучший способ сделать это?

Я обеспокоен тем, что, поскольку наш набор данных на самом деле довольно большой, он может работать не очень хорошо, особенно если в итоге нам придется что-то делать для чего-то, скажем, на три уровня ниже или больше.

Любая помощь будет оценена!

0
CustardBun 30 Июл 2020 в 00:55

2 ответа

Лучший ответ

Я сомневаюсь, что есть что-то лучше этого, по крайней мере, насколько мне известно, именно то, что вы предложили:

Object.keys(myThing).reduce((acc,val)=> [...acc, ...Object.keys(myThing[val])], []);
1
Talmacel Marian Silviu 29 Июл 2020 в 22:02
     myThing = {
       'someKeyTopLevel1': {
          'someKeySecondLevel1': [],
          'someKeySecondLevel5': []
       },
       'someKeyTopLevel2': {
          'someKeySecondLevel1': [],
          'someKeySecondLevel2': [],
          'someKeySecondLevel3': []
       }
    };

   for (var l1Key in myThing) {  
      for (var l2Key in myThing[l1Key ]) {
        console.log(l2Key);
      }
    }
0
BCM 29 Июл 2020 в 22:42