Реорганизовать мой объект JSON в Javascript по атрибутам

0

У меня есть одна проблема. Я получаю этот json файл из своего веб-сервера непосредственно из моей базы данных. Но в случае структуры я хочу, чтобы он структурировал ее на стороне клиента, чтобы поддерживать доступ к базе данных и запросы HTTP на низком уровне. Каждый элемент в этом массиве представляет собой один набор данных, который имеет подкатегорию под названием "sub" и главную категорию, называемую "main". Поскольку я работаю с AngularJS, я хочу отображать их в разных элементах с помощью ng-repeat. Поэтому я хочу реорганизовать структуру этого json, поэтому я получил массив основных категорий, у которых есть массив подкатегорий, в котором есть данные (или массив).

 [
   {name: 'A', ..., sub: 'sub1', main: 'main1'},
   {name: 'B', ..., sub: 'sub1', main: 'main1'},
   {name: 'C', ..., sub: 'sub2', main: 'main1'},
   {name: 'D', ..., sub: 'sub3', main: 'main2'},
   ....
]

должны быть реорганизованы в следующее:

[
   main1 : [
               sub1 : [    
                  {name: 'A', ...},
                  {name: 'B', ...}
               ],
               sub2 : [
                  {name: 'C', ...}
               ]
           ],
   main2 : [
               sub3 : [
                  {name: 'D', ...}

               ]
           ]
]

Я запрограммировал какие-то решения с множеством циклов, которые проходят через массив, запоминают все подкатегории и основные категории и т.д., Но главная проблема заключается в создании этих массивов, называемых main1 и main2 (затем sub1 и sub2, sub3). Проблема в том, что я не мог найти решение назвать эти массивы, поскольку они основаны на строковых значениях из моих "входных данных".

...
var subValue = .... (get name of sub category)
var result.push({subValue: []});
...

Это не работает. Все элементы массива называются subValue, а не именем, которое я хочу установить.

Надеюсь, я получу какую-то связанную информацию.

Теги:
arrays

2 ответа

0

Предполагая, что это результат, который вы ищете:

{
    main1 : {
        sub1 : [    
              {name: 'A', ...},
              {name: 'B', ...}
           ],
        sub2 : [ {name: 'C', ...} ]
    }, 
    main2 : {
        sub3 : [ {name: 'D', ...} ]
    }
}

Вы можете решить это, используя знак подчеркивания с двумя

var arr = [
    {name: 'A', sub: 'sub1', main: 'main1'},
    {name: 'B', sub: 'sub1', main: 'main1'},
    {name: 'C', sub: 'sub2', main: 'main1'},
    {name: 'D', sub: 'sub3', main: 'main2'}
];

var grouped = _.chain(arr)
           .groupBy('main')
           .mapObject(function(item) { return _.groupBy(item, 'sub');})
           .value();
0

Ваш запрошенный выход невозможен, потому что члены массива не являются объектными свойствами. В массивах нет "ключа: значение". main1 - это массив, и он может содержать значения, но не ключи (поэтому вы не можете генерировать main1: [ sub1:...)

Либо использовать объект вместо массива, либо иметь массив значений без ключей

PS, вы должны взглянуть на lodash или подобную библиотеку, которая сделает большую часть тяжелой работы для вас

  • 0
    Ну, очевидно, ОП немного отклонился от курса, но это не impossible ... просто нужно внести небольшие изменения

Ещё вопросы

Сообщество Overcoder
Наверх
Меню