У меня есть одна проблема. Я получаю этот 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, а не именем, которое я хочу установить.
Надеюсь, я получу какую-то связанную информацию.
Предполагая, что это результат, который вы ищете:
{
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();
Ваш запрошенный выход невозможен, потому что члены массива не являются объектными свойствами. В массивах нет "ключа: значение". main1
- это массив, и он может содержать значения, но не ключи (поэтому вы не можете генерировать main1: [ sub1:...
)
Либо использовать объект вместо массива, либо иметь массив значений без ключей
PS, вы должны взглянуть на lodash или подобную библиотеку, которая сделает большую часть тяжелой работы для вас
impossible
... просто нужно внести небольшие изменения