Цикл по вложенному объекту json, не зная имен определенного слоя - PullRequest
0 голосов
/ 20 июня 2019

Можно ли пройти через этот вложенный объект, если вы не знаете, сколько представлений ("A", "B", "C" ...) имеет этот объект? В настоящее время я использую алфавитный индекс, но я слышал, что теперь «слой представления» также может иметь разные имена, поэтому я не могу использовать свою текущую идею, я должен циклически проходить по этому объекту, не зная имен «A», «B», С-слой. Есть ли способ?

Мой текущий код

loopThroughObject()
{
   let alphabet = ["A", "B", "C"];
   let index = 0;

   this.all_tables.views.forEach(views => {

      views[alphabet[index]].forEach(view => {

         view.positionen.forEach(position=> {
           alert( position.field1);
         });

      });

      index++;
});
}

Вложенный объект JSON

 all_tables = {  
   "views":[  
      {  
         "A":[  
            {  
               "id":"",
               "username":"",
               "status":"",
               "location":"",
               "positionen":[  
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  }
               ]
            },
            {  
               "id":"",
               "username":"",
               "status":"",
               "location":"",
               "positionen":[  
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  }
               ]
            }
         ],
         "B":[  
            {  
               "id":"",
               "username":"",
               "status":"",
               "location":"",
               "positionen":[  
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  }
               ]
            },
            {  
               "id":"",
               "username":"",
               "status":"",
               "location":"",
               "positionen":[  
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  }
               ]
            }
         ],
         "C":[  
            {  
               "id":"",
               "username":"",
               "status":"",
               "location":"",
               "positionen":[  
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  }
               ]
            },
            {  
               "id":"",
               "username":"",
               "status":"",
               "location":"",
               "positionen":[  
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  },
                  {  
                     "field1":"",
                     "field2":"",
                     "field3":""
                  }
               ]
            }
         ]
      }
   ]
}

Ответы [ 3 ]

1 голос
/ 20 июня 2019

Я думаю, что ваша структура JSON не совсем верна.

Во-первых, свойство views имеет значение array, но в нем есть 1 элемент, и единственный элемент - object, который имеет элементы просмотра. Я думаю, что это должно быть object в первую очередь, поскольку JavaScript не имеет ассоциативного типа массива.

"views": {  
         "A":[ .. ],
         "B":[ .. ],
         ...
}

Затем вы можете выполнять итерацию с помощью Object методов, таких как Object.keys() или Object.values() или Object.entries() и т. Д.

Object.values(this.all_tables.views).forEach(viewGroup => {

     viewGroup.forEach(view => {

         view.positionen.forEach(position=> {
           alert( position.field1);
         });
     });
});

Для дальнейшего чтения:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object#Methods_of_the_Object_constructor

1 голос
/ 20 июня 2019

Существует несколько Object методов для этого: Object.keys (начиная с ES5), Object.values (начиная с ES2017), Object.entries (все еще экспериментальный).Для наиболее общего подхода вы можете использовать первый:

function loopThroughObject() {
  this.all_tables.views.forEach(views => {

    Object.keys(views).forEach(key => {
      let view = views[key];

      view.positionen.forEach(position => {
        alert(position.field1);
      });

    });
  });
}
0 голосов
/ 20 июня 2019

Вы можете использовать следующий код

function loopThroughObject()
{
    let index = 0;
    this.all_tables.views.forEach(views => {
       for (var key in views) {
           views[key].forEach(view => {
               view.positionen.forEach(position=> {
                   alert( position.field1);
               });
           });
       }
       index++;
   });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...